删除运行时检查CMAKE中每个项目的编译器标志

时间:2011-12-21 09:42:37

标签: configuration cmake

我有一个CMAKE配置,其中我的所有项目配置都包含/RTC1(两个运行时检查)编译器标志。但是,我希望只为一个项目切换到Default选项,因为它还有/clr编译器标志;这与Runtime Checks标志不兼容。我对CMAKE比较陌生,所以这可能有一个明显的解决方案,但到目前为止我还是无法找到它。

任何帮助都将不胜感激。

3 个答案:

答案 0 :(得分:13)

我没有设法找到一个解决方案,我可以很好地删除特定的选项,但我确实找到了一种方法,使用REGEX REPLACE从编译器标志变量中删除选项:

STRING (REGEX REPLACE "/RTC(su|[1su])" "" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")

如果这可能不是最理想的方法,那么它在我特殊情况下的情况下运作良好。

答案 1 :(得分:2)

如果您使用add_definitions()添加标记,则可以使用remove_definitions删除它们,请参阅documentation

此外,您可以使用COMPILE_DEFINITIONS目标媒体资源。

答案 2 :(得分:1)

我最近遇到了同样的问题,但没有找到优雅的解决方案。但是这段代码完成了这项工作:

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标志(例如Debug),您可以尝试以下方法:

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()

请注意使用generator expression $<$<CONFIG:Debug>: /RTC1 >,仅在调试中扩展为/RTC1