2011-12-21 10 views
7

Mam konfigurację CMAKE, w której wszystkie moje konfiguracje projektu zawierają flagę kompilatora /RTC1 (obie Runtime Checks). Jednak chcę przełączyć się na opcję Default tylko dla jednego projektu, ponieważ ma ona również flagę kompilatora /clr; który jest niezgodny z flagą Runtime Checks. Jestem stosunkowo nowy w CMAKE, więc może to być oczywiste rozwiązanie, ale do tej pory nie mogłem go znaleźć.Usuwanie Runtime Sprawdza flagę kompilatora dla projektu w CMAKE

Każda pomoc zostanie doceniona.

Odpowiedz

10

nie udało mi się znaleźć rozwiązanie, w którym mógłbym ładnie usuwania poszczególnych opcji, ale nie znaleźliśmy sposób na odpędzenie opcję z flag kompilatora zmiennych używając regex Replace:

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

Gdzie to może nie być najbardziej idealne podejście, działa dobrze w mojej sytuacji, w której jest to scenariusz specjalny.

+0

FWIW, musiałem powtórzyć to z "CMAKE_C_FLAGS" i "CMAKE_C_FLAGS_DEBUG". Zrobiłem to w pętli używając [wzorca z CMakeLists.txt SDL2 tutaj] (https://github.com/spurious/SDL-mirror/blob/release-2.0.3/CMakeLists.txt#L158). –

2

Jeśli dodajesz flagi z numerem add_definitions(), możesz je usunąć za pomocą remove_definitions, patrz documentation.

Można również odtwarzać z właściwością docelową COMPILE_DEFINITIONS.

+0

Próbowałem używać 'remove_definitions', ale pierwotne ustawienie było ustawione za pomocą' set (...) ', więc' remove_definitions' nie działało. W końcu rozwiązałem problem, używając polecenia REGEX REPLACE. –

+0

Rozumiem. Z twojego pytania nie było jasno. – arrowd

1

Ostatnio miałem do czynienia z tym samym problemem i nie znalazłem eleganckiego rozwiązania. Jednak kod ten spełnia swoje zadanie:

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

Jeśli trzeba tylko usunąć /RTC flagę dla jednej konfiguracji (ex Debug.) Można spróbować następujące podejście:

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

Proszę uwaga korzystając generator expression$<$<CONFIG:Debug>: /RTC1 > który rozszerza się do /RTC1 tylko w debugowaniu.

Powiązane problemy