CMake在不同的生成目录中生成多个目标

CMake build multiple targets in different build directories

本文关键字:目标 CMake      更新时间:2023-10-16

我有以下CMake结构:

CMakelists.txt
toolchain.cmake
folder1
   ----CMakelists.txt
folder2
   ----CMakelists.txt
etc..

我的第一级CMakelists.txt文件包括其他子目录。现在我想为不同的目标构建我的代码。

手动方式为:

1.
    mkdir hostBuild
    cd hostBuild
    cmake ..
    make
2.
    mkdir crossBuild
    cd crossBuild
    cmake .. --DCMAKE_TOOLCHAIN_FILE=toolchain.cmake
    make

这个过程有可能自动运行吗?

例如,我只需要在第一级运行cmake .

这样的事情可能发生吗?

否。建议将手动步骤放入shell脚本中。

CMake一次只能处理一个编译器/make环境(如果切换编译器,则需要不同的二进制输出目录)。

尤其是一个包含SET(CMAKE_SYSTEM_NAME ...)的工具链文件确实会改变配置/生成过程的整个结果。

有关CMake的详细信息,请参阅:CMake:文件解析的顺序(缓存、工具链…)?

您可以在shell脚本中使用一些CMake命令行选项:

if [ ! -d hostBuild ]; then
    cmake -E make_directory hostBuild
    cmake -E chdir hostBuild cmake ..
fi
cmake --build hostBuild
...