Configuration 删除CMAKE中每个项目的运行时检查编译器标志
我有一个CMAKE配置,其中我的所有项目配置都包括Configuration 删除CMAKE中每个项目的运行时检查编译器标志,configuration,cmake,Configuration,Cmake,我有一个CMAKE配置,其中我的所有项目配置都包括/RTC1(两个运行时检查)编译器标志。但是,我希望只为一个项目切换到默认选项,因为它还具有/clr编译器标志;与运行时检查标志不兼容。我对CMAKE比较陌生,所以这可能有一个明显的解决方案,但到目前为止我还没有找到 非常感谢您的帮助。如果您使用添加定义()添加标志,则可以使用删除定义来删除标志,请参阅 此外,您还可以使用target属性。我没有找到一个可以很好地删除特定选项的解决方案,但我找到了一种使用REGEX REPLACE从编译器标志变量
/RTC1
(两个运行时检查)编译器标志。但是,我希望只为一个项目切换到默认
选项,因为它还具有/clr
编译器标志;与运行时检查标志不兼容。我对CMAKE比较陌生,所以这可能有一个明显的解决方案,但到目前为止我还没有找到
非常感谢您的帮助。如果您使用
添加定义()
添加标志,则可以使用删除定义来删除标志,请参阅
此外,您还可以使用target属性。我没有找到一个可以很好地删除特定选项的解决方案,但我找到了一种使用REGEX REPLACE从编译器标志变量中剥离选项的方法:
STRING (REGEX REPLACE "/RTC(su|[1su])" "" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
这可能不是最理想的方法,但在我的特殊情况下,它很有效。我最近也遇到了同样的问题,没有找到完美的解决方案。但是,此代码执行以下操作:
foreach(flag_var
CMAKE_CXX_FLAGS CMAKE_CXX_FLAGS_DEBUG CMAKE_CXX_FLAGS_RELEASE
CMAKE_CXX_FLAGS_MINSIZEREL CMAKE_CXX_FLAGS_RELWITHDEBINFO)
STRING (REGEX REPLACE "/RTC[^ ]*" "" ${flag_var} "${${flag_var}}")
endforeach(flag_var)
set_property(TARGET necessary_targets_here APPEND_STRING PROPERTY COMPILE_FLAGS " /RTC1")
如果只需要清除一个配置(例如调试)的/RTC
标志,可以尝试以下方法:
STRING (REGEX REPLACE "/RTC[^ ]*" "" CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG}")
foreach(target_var necessary_targets_here)
target_compile_options(${target_var} PRIVATE $<$<CONFIG:Debug>: /RTC1>)
endforeach()
STRING(REGEX REPLACE)/RTC[^]*“CMAKE\u CXX\u FLAGS\u DEBUG”${CMAKE\u CXX\u FLAGS\u DEBUG}”)
foreach(此处为目标值)
目标编译选项(${target\u var}PRIVATE$)
endforeach()
请注意,仅在调试中使用扩展为$
的$
。我尝试使用remove\u definitions
,但原始设置是使用set(…)
设置的,因此remove\u definitions
不起作用。最后,我用一个REGEX REPLACE命令解决了这个问题。FWIW,我不得不用CMAKE\u C\u标志和CMAKE\u C\u标志\u DEBUG
重复这个过程。我在一个循环中使用.C/C++标记填充了/RTC1
和-RTC1
。为了删除这两个,我使用了字符串(REGEX替换“[/|-]RTC(su |[1su])”、“CMAKE_CXX_标志”${CMAKE_CXX_标志}”)