2011-12-21 6 views
7

すべてのプロジェクト構成に/RTC1(両方のランタイムチェック)コンパイラフラグが含まれているCMAKE構成があります。しかし、/clrコンパイラフラグがあるので、1つのプロジェクトに対してのみDefaultオプションに切り替えたいと思います。これはランタイムチェックフラグと互換性がありません。私はCMAKEには比較的新しいので、明らかな解決策があるかもしれませんが、これまでこれを見つけることができませんでした。CMAKEでランタイムチェックコンパイラフラグをプロジェクトごとに

ご協力いただければ幸いです。

答えて

10

私はきれいに特定のオプションを削除することもできますが、私はREPLACE REGEXを使用して、可変コンパイラフラグからオプションを除去する方法を見つけたことにより、解決策を見つけるために管理していませんでした:

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

これは最も理想的なアプローチではないかもしれませんが、特殊ケースのシナリオである私の状況ではうまくいきました。

+0

FWIW、私は 'CMAKE_C_FLAGS'と' CMAKE_C_FLAGS_DEBUG'でこれを繰り返さなければなりませんでした。私はこれを[SDL2のCMakeLists.txtのパターン](https://github.com/spurious/SDL-mirror/blob/release-2.0.3/CMakeLists.txt#L158)を使ってループで実行しました。 –

2

add_definitions()でフラグを追加する場合は、remove_definitionsでフラグを削除できます。documentationを参照してください。

また、COMPILE_DEFINITIONS対象のプロパティでプレーすることもできます。

+0

私は 'remove_definitions'を使ってみましたが、元の設定は' set(...) 'を使って設定されていたので、 'remove_definitions'は動作しませんでした。私はREGEX REPLACEコマンドを使ってこの問題を解決しました。 –

+0

参照してください。あなたの質問からは明らかではありませんでした。 – arrowd

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

あなただけには、次のアプローチしようとし得る1つの構成(例:デバッグ。)のため/RTCフラグをクリアする必要がある場合:generator expression$<$<CONFIG:Debug>: /RTC1 >を使用して、ノート、

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

をしてくださいデバッグでのみ/RTC1に展開されます。

関連する問題