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