1. ホーム
  2. cmake

[解決済み] CMake で /MD の代わりに /MT を使ってコンパイルする。

2023-05-06 21:27:56

質問

Windows SDKとNMakeのMakefileを使用して、Windows上でCMakeを使用しています。

デフォルトではコンパイル時に /MD コンパイラスイッチでコンパイルします。

でコンパイルするように変更するにはどうしたらよいでしょうか。 /MT スイッチでコンパイルするように変更できますか?

どのように解決するには?

を修正することができます。 CMAKE_CXX_FLAGS_<Build Type> および CMAKE_C_FLAGS_<Build Type> という変数があります。

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

CMake のフラグにすでに /MD を含んでいる場合、上記のコマンドが実行されるようにすることができます。 の後に が実行された時点 /MD が挿入される点(後で追加される /MT が挿入されます (後から追加された は衝突する既存のオプションを上書きします)。 また、ゼロからフラグを設定することもできます。

set(CMAKE_CXX_FLAGS_RELEASE "/MT")
set(CMAKE_CXX_FLAGS_DEBUG "/MTd")

あるいは、既存の /MD/MDd の値は /MT/MTd のようにすることで、それぞれ

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