繁体   English   中英

如何为每个构建类型设置编译器标志?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM