CMake如何在不同的构建目录中构建多个目标

10

我有以下的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 .

是否有类似的可能性?

1个回答

10

不行,建议你将手动步骤放入一个shell脚本中。

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

尤其是一个包含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
...

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接