在CMake 3.x中使用构建类型

时间:2014-09-22 18:04:58

标签: cmake

在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是否为每个构建类型设置了任何默认编译器选项(例如,对于Debug构建类型,-g)?

1 个答案:

答案 0 :(得分:3)

将来每个问题请尽量坚持一个问题。您可能会因为过于宽泛而无法关闭。此外,对于明确定义的精确问题,您更有可能获得良好的答案。

  

如何定义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)并且版本构建得到了很好的优化。