2013-01-05 10 views
25

の/ MTでコンパイルし、私はそれが/ MDコンパイラスイッチでコンパイルデフォルトではWindowsのSDKとのnmake MakefileのCMakeのではなく、/ MD

と窓にcmakeのを使用しています。

代わりに、/ MTスイッチを使用してコンパイルするように変更する方法はありますか。あなたのcmakeのフラグがすでに/MDが含まれている場合は、(上記のコマンドは/MDが挿入された時点の後を実行していることを確認することができ、

set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /MT") 
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /MTd") 

答えて

41

あなたがCMAKE_CXX_FLAGS_<Build Type>および/またはCMAKE_C_FLAGS_<Build Type>変数を変更することができます後で/MTを追加すると矛盾する既存のオプションよりも優先されます)、またはゼロからフラグを設定することができます。

または代わりに、あなたはそれぞれのような何かをすることによって/MT/MTdで既存/MD/MDd値を置き換えることができます:

set(CompilerFlags 
     CMAKE_CXX_FLAGS 
     CMAKE_CXX_FLAGS_DEBUG 
     CMAKE_CXX_FLAGS_RELEASE 
     CMAKE_C_FLAGS 
     CMAKE_C_FLAGS_DEBUG 
     CMAKE_C_FLAGS_RELEASE 
     ) 
foreach(CompilerFlag ${CompilerFlags}) 
    string(REPLACE "/MD" "/MT" ${CompilerFlag} "${${CompilerFlag}}") 
endforeach() 
+0

ありがとう!それは動作します。とにかく古い '/ MD'フラグを削除するには? – Josh

+0

@Josh私はちょうど答えを更新しました。まだそれがあなたの後ろのものではないなら、あなたのCMakeLists.txtの適切なビットを表示して、きちんとした答えがあると確信しています。 – Fraser

+0

@Josh私は 'string(REPLACE ...) 'コマンドで少しミスを犯しました。これは修正されました。 – Fraser

0

チェックアウトucm_set_runtime - 効果を確認するために - 静的または動的な実行時のフラグに置き換えられます。このマクロucm_print_flags(チェックアウトthisスタックオーバーフロースレッド)

関連する問題