【问题标题】:Using build type in CMake 3.x在 CMake 3.x 中使用构建类型
【发布时间】:2014-09-22 18:04:58
【问题描述】:

在 2.x 版本的 CMake 中,cmake 选项 CMAKE_BUILD_TYPE 控制要传递给编译器的选项。例如,如果CMAKE_BUILD_TYPE=RelWithDebInfo,那么传递给编译器的选项对于 C++ 是 CMAKE_CXX_FLAGS_RELWITHDEBINFO,对于 C (http://binglongx.wordpress.com/tag/cmake_build_type/) 是 CMAKE_C_FLAGS_RELWITHDEBINFO

在新的 3.x 版本的 CMake 中,有命令 add_compile_optionstarget_compiler_options 用于向编译器添加选项 (What is the modern method for setting general compile flags in CMake?)。

问题

如何定义 CMake 应该使用的构建类型?还是比如cmake -DCMAKE_BUILD_TYPE=Debug

如何在我的 CMakeLists.txt 中使用这种构建类型?

CMake 是否定义了所有构建类型,或者我可以定义自定义、附加的构建类型?

CMake 是否为每种构建类型设置了任何默认编译器选项(例如,-g 用于调试构建类型)?

【问题讨论】:

  • the cmake option CMAKE_BUILD_TYPE controlled options to be passed to the compiler 不,看到这个answer

标签: cmake


【解决方案1】:

以后请尽量坚持每个问题一个问题。否则,您可能会冒着被关闭的风险过于宽泛。此外,对于定义明确、精确的问题,您更有可能得到好的答案。

如何定义 CMake 应该使用的构建类型?是否还在,因为 例如,cmake -DCMAKE_BUILD_TYPE=Debug?

是的,这没有改变。

如何在我的 CMakeLists.txt 中使用这种构建类型?

使用generator expressions。例如:

target_compile_options(my_program PUBLIC $<$<CONFIG:Debug>:-Werror>)
# Warnings are errors for debug build only

CMake 是否定义了所有构建类型,或者我可以定义自定义, 其他,构建类型?

如果默认设置不适合您,您可以添加自己的类型。请注意,虽然这可能有点繁琐,所以除非你有充分的理由,否则我不会这样做。看看CMAKE_CONFIGURATION_TYPES

CMake 是否为每种构建类型设置了任何默认编译器选项 (例如 -g 用于 Debug 构建类型)?

CMake 在为不同的配置选择正确的默认值方面做得很好。特别是,Debug 和 RelWithDebInfo 构建可以正确生成符号(gcc 上的-g),并且 Release 构建得到了很好的优化。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-21
    相关资源
    最近更新 更多