在手册页中add_compile_options()
我没有看到任何提及如何修改Release/Debug编译器标志.你可以add_compiler_options()
用来修改Release/Debug编译器标志吗?如果有,怎么样?
如果不是,推荐的规范方法是修改发布/调试cmake变量[1],如下所述?
[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).
如果你想通过几个项目重用你的编译器设置,或者你需要区分C和C++之间的编译器选项,我建议你为每个支持的编译器使用CMAKE_C_FLAGS
/ CMAKE_CXX_FLAGS
variant和一个工具链文件(参见例如这里或这里).
但如果你只是需要一些额外的C++编译器选项,在您的项目,同时add_compile_options()
,target_compile_options()
或者target_compile_features()
是要走的路.
是的,你可以区分DEBUG
和RELEASE
那里.
例子
该add_compile_options()
命令确实采用生成器表达式:
add_compile_options("$<$<CONFIG:DEBUG>:/MDd>")
Run Code Online (Sandbox Code Playgroud)
要么
add_compile_options(
"$<$<CONFIG:RELEASE>:-std=gnu99>"
"$<$<CONFIG:DEBUG>:-std=gnu99 -g3>"
)
Run Code Online (Sandbox Code Playgroud)最好还要检查编译器ID:
add_compile_options("$<$<AND:$<CXX_COMPILER_ID:MSVC>,$<CONFIG:DEBUG>>:/MDd>")
Run Code Online (Sandbox Code Playgroud)
要么
if (MSVC)
add_compile_options("$<$<CONFIG:DEBUG>:/MDd>")
endif()
Run Code Online (Sandbox Code Playgroud)让CMake 为您决定正确的编译器选项会更好.因此,您可以设置CXX_STANDARD
目标所需的:
Run Code Online (Sandbox Code Playgroud)set_property(TARGET tgt PROPERTY CXX_STANDARD 11)
或者给出目标需要的编译器功能target_compile_features()
Run Code Online (Sandbox Code Playgroud)add_library(mylib requires_constexpr.cpp) # cxx_constexpr is a usage-requirement target_compile_features(mylib PUBLIC cxx_constexpr)
参考
归档时间: |
|
查看次数: |
4268 次 |
最近记录: |