CMake & Ninja


CMakeLists.txt

cmake_minimum_required(VERSION 3.0)

project(a.out C)

# 設置SRC變量,包含目錄下的源文件,不包括子目錄
aux_source_directory(src SRC)
aux_source_directory(src/lib SRC)

set(
    SRC

    ${SRC}  # 向SRC變量追加內容
    src/main.c
)
message(STATUS "SRC -> " "${SRC}")  # 打印變量

set(EXECUTABLE_OUTPUT_PATH ..)  # 設置可執行文件輸出路徑

add_executable("${PROJECT_NAME}" "${SRC}")

執行CMake,生成Ninja腳本

$ cmake -G Ninja -B bin
-- The C compiler identification is GNU 10.2.0
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working C compiler: C:/cygwin64/bin/cc.exe - skipped
-- Detecting C compile features
-- Detecting C compile features - done
-- SRC -> src/main.c;src/lib/foo.c;src/main.c
-- Configuring done
-- Generating done
-- Build files have been written to: C:/Users/ly/Desktop/rust/c/bin

再次運行,工作量明顯減少了,同時也不用再使用-G參數聲明生成器了:

$ cmake -B bin
-- SRC -> src/main.c;src/lib/foo.c;src/main.c
-- Configuring done
-- Generating done
-- Build files have been written to: C:/Users/ly/Desktop/rust/c/bin

執行Ninja

$ ninja -C bin
ninja: Entering directory `bin'
[3/3] Linking C executable ..\a.out.exe

當修改了CMakeLists.txt后,無需再次CMake,ninja會重新運行它:

ninja -C bin
ninja: Entering directory `bin'
[0/1] Re-running CMake...
-- SRC -> src/main.c;src/lib/foo.c;src/main.c
-- Configuring done
-- Generating done
-- Build files have been written to: C:/Users/ly/Desktop/rust/c/bin
[3/3] Linking C executable ..\a.exe

END


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM