web-dev-qa-db-fra.com

Compiler avec/MT au lieu de/MD en utilisant CMake

J'utilise CMake sur Windows avec le SDK Windows et NMake Makefiles.

Par défaut, il compile avec le commutateur de compilation /MD.

Comment puis-je le changer pour compiler avec le commutateur /MT à la place?

38
Josh

Vous pouvez modifier les variables CMAKE_CXX_FLAGS_<Build Type> et/ou 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")

Si vos drapeaux CMake contiennent déjà /MD, vous pouvez vous assurer que les commandes ci-dessus sont exécutées après le point auquel /MD est inséré (l'ajout ultérieur de /MT écrase l'option existante conflictuelle), ou vous pouvez définir les drapeaux de zéro. :

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

Ou bien, vous pouvez remplacer les valeurs /MD et /MDd existantes par /MT et /MTd respectivement en procédant comme suit:

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

Vérifiez ucm_set_runtime - cette macro remplacera les indicateurs pour une exécution statique ou dynamique - pour voir les effets, utilisez ucm_print_flags (également extraire this Stack Overflow question).

0
onqtam