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

posted @ 2021-04-14 15:16  develon  阅读(2924)  评论(0编辑  收藏  举报