gpt4 book ai didi

c++ - 使用 CMake 为不同的构建类型创建构建树

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:38:15 24 4
gpt4 key购买 nike

我知道如何根据构建类型(发布、调试等)让 CMake 输出库和容器,但是,为了减少(重新)编译时间,我想让 CMake 在不同的子文件夹中构建它们。

说我有这种树

|- CMakeLists.txt
|- build/
|- src/

如果我有调试、发布和 relwithdebinfo 构建,我希望 CMake 自动为我创建一棵像这样的树

|- CMakeLists.txt
|- build/
|--- Debug/
|--- Release/
|--- RelWithDebInfo/
|- src/

等等。这可能吗,如果可以,我怎样才能实现我的目标?

我不想要像“你应该从不同的文件夹运行 CMake”这样的答案,因为对于 visual studio 这会导致多种解决方案等。我希望能够仅从一个文件夹运行 CMake,并让它自己处理子文件夹。

最佳答案

如果您不理会 CMake,它将自动为支持多种配置的生成器(如 Visual Studio)执行此操作。

如果您覆盖默认输出位置,您应该通过 *_OUTPUT_DIRECTORY 来实现目标属性,支持 generator expressions :

set_property(TARGET my_lib
PROPERTIES LIBRARY_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/$<CONFIG>/bin)

注意 $<CONFIG>生成器表达式,它将扩展为配置名称(Debug、Release 等)。

另请注意,如果您希望配置目录位于目录树的底部,您甚至不必显式地给出生成器表达式:

This property specifies the directory into which library target files should be built. The property value may use generator expressions. Multi-configuration generators (VS, Xcode) append a per-configuration subdirectory to the specified directory unless a generator expression is used.

控制输出目录的三个属性是ARCHIVE_OUTPUT_DIRECTORY , LIBRARY_OUTPUT_DIRECTORYRUNTIME_OUTPUT_DIRECTORY . This page解释差异。

此外,您可能还想设置 PDB_OUTPUT_DIRECTORY对于带有 pdb 调试符号的构建。

现在,如开头所述,所有这些仅适用于支持多种配置的生成器。对于像 Makefile 这样的单一配置生成器,情况就不同了。在这里,您必须在运行 CMake 时满足一种特定配置(通过在命令行或 cmake-gui 上设置 CMAKE_BUILD_TYPE 变量)。如果要切换配置,则必须使用该变量的不同设置重新运行 CMake。

这些生成器不支持同时拥有多个配置。因此,如果您使用单配置生成器并且您知道您需要定期调试和发布构建,那么最好为不同的配置保留单独的构建目录,并在每个配置中分别运行 cmake。

关于c++ - 使用 CMake 为不同的构建类型创建构建树,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38584800/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com