【问题标题】:What is the default build configuration of cmakecmake的默认构建配置是什么
【发布时间】:2015-01-21 01:29:07
【问题描述】:

this 的回答中,它说 Debug 是默认的 cmake 构建配置。

但我有不同的观察:

我的 CMakeLists.txt 中有以下内容,可根据当前构建配置选择调试和发布版本的库。

target_link_libraries(MyApp debug Widgets_d)
target_link_libraries(MyApp optimized Widgets)

似乎当我在没有指定 -DCMAKE_BUILD_TYPE 标志的情况下调用 cmake 时,使用了 Widgets 而不是 Widgets_d(当我删除 Widgets 并尝试构建时,make 抱怨 lib 不存在)。所以这意味着默认情况下构建配置是优化的,而不是调试的。

那么实际上默认的构建配置是什么?如果是调试,我的 CMakelists.txt 可能有什么问题?

【问题讨论】:

标签: c++ cmake


【解决方案1】:

target_link_librariesoptimized关键字对应所有配置,不调试。

尝试将message(STATUS "Build type: ${CMAKE_BUILD_TYPE}") 添加到您的 CMakeLists.txt 以查看实际的构建类型(我想它应该是空的)。

【讨论】:

  • 那么如果我在构建的时候不指定CMAKE_BUILD_TYPE,那么构建将是一个优化的构建并且不会在二进制中添加任何调试信息?
  • 您自己代码的调试信息和优化将取决于为默认构建类型设置的编译器标志。至于 Widgets 库,是的,MyApp 将与 Widgets(而不是 Widgets_d)链接。如果您使用 CMake 生成 Makefile(CMake 也支持其他输出格式),您可以使用“make VERBOSE=1”查看确切的编译器标志。
【解决方案2】:

是否取决于您使用的是单配置生成器 (Makefiles) 还是多配置生成器(Visual Studio、XCode)。

问题中引用的link 是关于多配置生成器的。使用多配置生成器时,配置变量CMAKE_BUILD_TYPE 将被忽略。要选择要构建的配置,cmake 允许开关--config,默认为Debug。所以

cmake --build .

在多配置项目中构建Debug 版本。

但是,当使用单一配置生成器时,开关 --config 将被忽略。只有配置变量CMAKE_BUILD_TYPE用于确定构建类型,默认为Release

this answer 中有关单配置和多配置生成器的更多背景信息。

【讨论】:

    猜你喜欢
    • 2015-08-12
    • 2011-05-27
    • 1970-01-01
    • 1970-01-01
    • 2011-09-19
    • 1970-01-01
    • 2017-01-13
    • 2010-12-10
    相关资源
    最近更新 更多