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