Я недавно столкнулся с той же проблемой и не нашел элегантного решения.Однако этот код выполняет свою работу:
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()
Обратите внимание на использование выражения генератора $<$<CONFIG:Debug>: /RTC1 >
, которое расширяется до /RTC1
только в Debug.