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