在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_options
和target_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
)?
答案 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
)并且版本构建得到了很好的优化。