我认为想要在发布模式中添加特定的编译器cxx标志。我在另一个线程中读到-O2是发布配置的好标志
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -Wall -O2")
但如果我现在检查CXX标志
message(${CMAKE_CXX_FLAGS_RELEASE})
他写信给我
-O3 -DNDEBUG -Wall -O2
最好的问候
答案 0 :(得分:10)
使用编译器文档查看O2和O3之间的区别 并做出选择(例如 - gcc。Here您可以建议将O2用于稳定性。
您可以使用此宏删除标记:
macro(remove_cxx_flag flag)
string(REPLACE "${flag}" "" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
endmacro()
<强> [使用方法] 强>
macro(remove_cxx_flag flag)
string(REPLACE "${flag}" "" CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE}")
endmacro()
message(${CMAKE_CXX_FLAGS_RELEASE}) # print "-O3 -DNDEBUG"
remove_cxx_flag("-O3")
message(${CMAKE_CXX_FLAGS_RELEASE}) # print "-DNDEBUG"
这里使用的是宏,因为你需要从父范围更新变量,读取这个 - http://www.cmake.org/cmake/help/v2.8.10/cmake.html#command:macro(或者你可以使用PARENT_SCOPE修饰符的函数)
NDEBUG用于停用assert,有关详细信息,请参阅What is the NDEBUG preprocessor macro used for (on different platforms)?。
答案 1 :(得分:1)
${val}
引用变量。
您的set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -Wall -O2")
添加先前配置的CMAKE_CXX_FLAGS_RELEASE变量。
所以将其改为
set(CMAKE_CXX_FLAGS_RELEASE "-DNDEBUG -Wall -O2")
-DNDEBUG
从您的代码中删除断言 - 跳过它。
更多http://en.cppreference.com/w/cpp/error/assert
答案 2 :(得分:0)
如果您要覆盖设置为CMAKE_C_FLAGS_RELEASE
的{{1}} CMAKE_CXX_FLAGS_RELEASE
的默认CMAKE_BUILD_TYPE
或release
变量,则需要执行此操作在-O3 -DNDEBUG
行之前。从本质上讲,如果发布版本类型默认不适合您,您需要自己动手。另一种可能性是在project
CMAKE_TOOLCHAIN_FILE