如何告诉 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
我想使用不同的配置编译源代码。我知道我需要的是源代码之外的构建。我只是不太明白如何:
- 告诉 cmake 要生成什么样的配置(例如,
cd build_local; cmake -D local
?)
- 如何以生成不同 默认 目标(即
make all
或 make
)的方式编写 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()
命令,因此您的 配置的 项目可能因配置不同而完全不同。
如何编写一个 CMakeLists.txt
文件来接受不同的源外构建?我不是在谈论 Debug 和 Release,而是更多关于远程测试的构建,本地测试的构建等。
例如:如果我进入 build_local
构建目录和 运行 make
我想为本地配置编译源代码。如果我在 build_production
构建目录中 运行 make
我想使用不同的配置编译源代码。我知道我需要的是源代码之外的构建。我只是不太明白如何:
- 告诉 cmake 要生成什么样的配置(例如,
cd build_local; cmake -D local
?) - 如何以生成不同 默认 目标(即
make all
或make
)的方式编写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()
命令,因此您的 配置的 项目可能因配置不同而完全不同。