如何告诉 cmake 为外源构建生成不同的默认目标?

How to tell cmake to generate different default targets for out-of-source-builds?

如何编写一个 CMakeLists.txt 文件来接受不同的源外构建?我不是在谈论 Debug 和 Release,而是更多关于远程测试的构建,本地测试的构建等。

例如:如果我进入 build_local 构建目录和 运行 make 我想为本地配置编译源代码。如果我在 build_production 构建目录中 运行 make 我想使用不同的配置编译源代码。我知道我需要的是源代码之外的构建。我只是不太明白如何:

  1. 告诉 cmake 要生成什么样的配置(例如,cd build_local; cmake -D local?)
  2. 如何以生成不同 默认 目标(即 make allmake)的方式编写 CMakeLists.txt 文件,具体取决于配置

有人提供示例或 link 适当的文档吗?

谢谢!

使用 if 命令,您可以使用不同的含义填充 default 目标(和其他),具体取决于配置。

CMakeLists.txt:

...
option(LOCAL "Build local-testing project" OFF)
if(LOCAL)
    add_executable(program_local local.c)
else()
    add_executable(program_remote remote.c)
endif()

本地构建:

cd build_local
cmake -DLOCAL=ON ..
make
...

远程构建:

cd build_remote
cmake ..
make

if 分支中,您甚至可以使用不同的 add_subdirectory() 命令,因此您的 配置的 项目可能因配置不同而完全不同。