[英]How to set compiler flags per Build type?
我的 CMakeLists.txt 中有以下内容:
if (CMAKE_CXX_COMPILER_ID MATCHES "Clang")
list(APPEND CMAKE_CXX_FLAGS -Wall -Werror -pedantic-errors -Wextra -Wno-unused-function)
elseif (CMAKE_CXX_COMPILER_ID MATCHES "GNU")
list(APPEND CMAKE_CXX_FLAGS -Wall -Werror -pedantic-errors -Wextra -Wno-unused-function)
elseif (CMAKE_CXX_COMPILER_ID MATCHES "Intel")
elseif (CMAKE_CXX_COMPILER_ID MATCHES "MSVC")
list(APPEND CMAKE_CXX_FLAGS /WX /W4 /wd4505 /permissive- /analyze:external- /external:anglebrackets /external:W0 /wd4251 /Zc:preprocessor /Zc:__cplusplus /Zc:char8_t Yes /Zc:rvalueCast)
add_compile_definitions(_CRT_SECURE_NO_WARNINGS)
list(APPEND CMAKE_CXX_FLAGS_RELEASE /fp:fast /GL /MP /Gw /GR- /Oy /Ot /Oi)
list(APPEND CMAKE_CXX_FLAGS_RELWITHDEBINFO /fp:fast /GL /MP /Gw /GR- /Oy /Ot /Oi)
list(APPEND CMAKE_CXX_FLAGS_MINSIZEREL /fp:fast /GL /MP /Gw /GR- /Oy /Ot /Oi)
endif()
但是,当生成 Visual Studio 解决方案时,它没有任何这些标志:
似乎只填充了默认标志。
解决方案是不使用list(APPEND..)
而使用string(APPEND...)
:
if (CMAKE_CXX_COMPILER_ID MATCHES "Clang")
string(APPEND CMAKE_CXX_FLAGS " -Wall -Werror -pedantic-errors -Wextra -Wno-unused-function")
elseif (CMAKE_CXX_COMPILER_ID MATCHES "GNU")
string(APPEND CMAKE_CXX_FLAGS " -Wall -Werror -pedantic-errors -Wextra -Wno-unused-function")
elseif (CMAKE_CXX_COMPILER_ID MATCHES "Intel")
elseif (CMAKE_CXX_COMPILER_ID MATCHES "MSVC")
string(APPEND CMAKE_CXX_FLAGS " /WX /W4 /wd4505 /permissive- /analyze:external- /external:anglebrackets /external:W0 /wd4251 /Zc:preprocessor /Zc:__cplusplus /Zc:char8_t Yes /Zc:rvalueCast")
add_compile_definitions(_CRT_SECURE_NO_WARNINGS)
string(APPEND CMAKE_CXX_FLAGS_RELEASE " /fp:fast /GL /MP /Gw /GR- /Oy /Ot /Oi")
string(APPEND CMAKE_CXX_FLAGS_RELWITHDEBINFO " /fp:fast /GL /MP /Gw /GR- /Oy /Ot /Oi")
string(APPEND CMAKE_CXX_FLAGS_MINSIZEREL " /fp:fast /GL /MP /Gw /GR- /Oy /Ot /Oi")
endif()
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.