代码之家  ›  专栏  ›  技术社区  ›  Henrik Melfald Kittang

如何使用cmake配置c++的调试和发布模式

  •  0
  • Henrik Melfald Kittang  · 技术社区  · 1 年前

    我正试图用cmake建立一个c++项目。我希望能够在发布和调试模式下编译我的项目,因此我希望我的可执行文件有不同的文件夹。由于只有少数差异将两个版本分开,比如编译器标志,我希望它们有尽可能多的其他配置。理想情况下,我的文件夹结构应该是这样的:

    root/
    │
    ├── src/
    │  
    ├── CMakeLists
    │
    └── build/
          └── bin/
           │   ├── Debug/
           │   └── Release/
           └──Makefile
    

    在这种情况下,这两个文件夹共享makefile和cmake配置文件。我注意到视觉工作室是这样做的。然而,cmake在运行时似乎已经让我在调试和发布模式之间做出了选择 cmake -B build -G "MinGW Makefiles" -DCMAKE_BUILD_TYPE=Release .我似乎不影响任何人 cmake --build build --config Release ,例如在设置二进制输出目录时。

    This 堆栈溢出帖子建议在构建时直接进行调试和发布,并为这两种模式设置两个完全独立的makefile和cmake配置。这将使我的环境设置变得复杂,并使其余部分变得相当混乱。

    例如,即使使用 --config Release :

    set(CMAKE_RUNTIME_OUTPUT_DIRECTORY${CMAKE_BINARY_DIR}/$<IF:$<CONFIG:Debug>,Debug,Release>)
    

    关于如何使用cmake实现这种文件夹结构并正确实现c++的构建模式,有什么建议吗?

    1 回复  |  直到 1 年前
        1
  •  2
  •   Marcus Müller    1 年前

    cmake不是visualstudio构建系统。我认为与你所说的相反:在同一构建尝试中混合不同的构建会使事情变得非常复杂,因为这需要重写许多相对路径,尤其是生成的目标。Cmake根本不起作用,因为构建类型是配置范围内的常数。一个构建中不能有两种不同的构建类型。所以,如果不实际执行两次cmake运行、两次构建运行,并将文件一起复制到一个层次结构中,你想要的是完全不可能的。那时你真的什么也没赢!

    在这种情况下,这两个文件夹共享makefile和cmake配置文件。

    绝对不会!生成文件必然不同——不仅编译器标志不同,还会有其他构建工件。这里可重复使用的东西很少。

    所以,是的,另一个来源是正确的:创建两个不同的目录,两个不同 cmake 跑进去,一个 -DCMAKE_BUILD_TYPE=Release 另一个与 -DCMAKE_BUILD_TYPE=RelWithDebInfo (或您想要的任何调试类型的构建)。