在add_compile_options()
的手册页中,我没有看到如何修改Release / Debug编译器标志。 您可以使用add_compiler_options()
修改Release / Debug编译器标志吗?如果是,怎么做?
如果不是,推荐的规范方法是修改the release/debug cmake variables[1] as described here吗?
[1] 即设置cmake变量CMAKE_< LANG> _FLAGS_< TYPE> (对于lang c / c ++,它将是:CMAKE_CXX_FLAGS_RELEASE,CMAKE_CXX_FLAGS_DEBUG,CMAKE_C_FLAGS_RELEASE,CMAKE_C_FLAGS_DEBUG)。
答案 0 :(得分:7)
如果您想通过几个项目重用编译器设置,或者需要区分C和C ++之间的编译器选项,我建议CMAKE_C_FLAGS
/ CMAKE_CXX_FLAGS
变体使用{{3对于每个支持的编译器(请参阅例如toolchain file或here)。
但是如果您只需要在项目中添加一些额外的C ++编译器选项,那么可以采用here,add_compile_options()
或target_compile_options()
。
是的,您可以区分DEBUG
和RELEASE
。
<强>实施例强>
add_compile_options()
命令确实需要target_compile_features()
:
add_compile_options("$<$<CONFIG:DEBUG>:/MDd>")
或
add_compile_options(
"$<$<CONFIG:RELEASE>:-std=gnu99>"
"$<$<CONFIG:DEBUG>:-std=gnu99 -g3>"
)
最好还要检查编译器ID:
add_compile_options("$<$<AND:$<CXX_COMPILER_ID:MSVC>,$<CONFIG:DEBUG>>:/MDd>")
或
if (MSVC)
add_compile_options("$<$<CONFIG:DEBUG>:/MDd>")
endif()
让CMake为您决定generator expressions更好。因此,您可以设置目标所需的the correct compiler options:
set_property(TARGET tgt PROPERTY CXX_STANDARD 11)
或通过CXX_STANDARD
add_library(mylib requires_constexpr.cpp) # cxx_constexpr is a usage-requirement target_compile_features(mylib PUBLIC cxx_constexpr)
<强>参考强>