Удалите флаг компиляции Runtime Checks для каждого проекта в CMAKE - PullRequest
9 голосов
/ 21 декабря 2011

У меня есть конфигурация CMAKE, где все конфигурации моего проекта включают флаг компилятора /RTC1 (обе проверки во время выполнения).Однако я хочу переключиться на параметр Default только для одного проекта, так как он также имеет флаг компилятора /clr;что несовместимо с флагом проверки времени выполнения.Я относительно новичок в CMAKE, так что это может иметь очевидное решение, но я до сих пор не смог его найти.

Любая помощь будет признательна.

Ответы [ 3 ]

13 голосов
/ 21 декабря 2011

Мне не удалось найти решение, с помощью которого я мог бы красиво удалить определенные опции, но я нашел способ убрать опцию из переменной флагов компилятора с помощью ЗАМЕНЫ РЕГЕКСА:

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

Там, где это может быть не самый идеальный подход, он хорошо работал в моей ситуации, когда это сценарий с особым случаем.

2 голосов
/ 21 декабря 2011

Если вы добавляете свои флаги с помощью add_definitions(), то вы можете удалить их с помощью remove_definitions, см. документацию .

Кроме того, вы можете играть с COMPILE_DEFINITIONS target property.

1 голос
/ 28 августа 2016

Я недавно столкнулся с той же проблемой и не нашел элегантного решения.Однако этот код выполняет свою работу:

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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...