cmake在源目录中构建,而不是PWD

时间:2020-11-06 14:20:53

标签: cmake

问题 Debug vs Release in CMake 表示

cd ~/codebase
mkdir Release
cd Release
cmake -DCMAKE_BUILD_TYPE=Release ..
make

将在release中创建Makefile,并在此处构建二进制文件。中间的.o文件将位于此文件的子目录中。

但是,当我在项目中执行此操作时,CMake会忽略启动它的PWD。最终目标始终是包含~/codebase/的目录CMakeList.txt。 在cmake-gui工具中,我将源目录和构建目录指定为同一目录,即FQN到代码库

我是CMake的新手,也不知道如何使它按我的期望工作。我应该修改些什么才能按预期完成这项工作?

1 个答案:

答案 0 :(得分:3)

如果您使用单个配置生成器(Ninja / Unix-Makefiles)

然后,每个配置都需要一个构建文件夹。

赞:

# Configure the build
cmake -S . -B build/Debug -D CMAKE_BUILD_TYPE=Release

# Actually build the binaries
cmake --build build/Debug

对于多配置生成器,它略有不同(Ninja Multi-Config,Visual Studio)

# Configure the build
cmake -S . -B build

# Actually build the binaries
cmake --build build --config Debug

如果您想知道为什么这样做是必要的,那是因为cmake不是构建系统。这是一个元构建系统(即创建构建系统的构建系统)。这基本上是在1个构建中处理支持多种配置的构建系统的结果。如果您想更深入地了解,我建议您在Craig Scott的书“ Professional CMake:实用指南

注意: 我的示例使用了更新的cmake cli做法。

编辑: 您链接到的问题有危险的过时答案...

相关问题