J'essaie d'utiliser IUP pour créer un programme d'interface graphique sous Windows 10. J'utilise également Clion + MSVC comme IDE. IUP a à la fois des fichiers .lib et .dll à télécharger et tout se passe bien quand je ne spécifie pas comment créer un lien dans cmake; cmake essaie automatiquement de se lier dynamiquement avec iup.dll lorsqu'il n'y a pas d'indicateur personnalisé concernant la liaison.
Cependant, lorsque j'essaye de lier statiquement iup.dll avec un indicateur de compilateur / MT
, le compilateur automatiquement change / MT
en / MD
et lier simplement dynamiquement.
Voici le code cmake que j'ai utilisé pour forcer la liaison statique du compilateur:
cl : Command line warning D9025 : overriding '/MT' with '/MD'
et puis j'obtiens cet avertissement:
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /MT")
Un moyen de "forcer" cmake et le compilateur à lier statiquement la bibliothèque à mon programme? p>
3 Réponses :
Cmake avait des commandes pour définir automatiquement presque tous ces indicateurs.
Essayez d'ajouter add_library (iup.dll STATIC IMPORTED)
avant les target_link_libraries
Par défaut, CMake utilise la bibliothèque d'exécution dynamique MSVC ( / MD
) lors de la création de bibliothèques statiques ou partagées.
Vous devez remplacer le paramètre / MD
dans le Variables CMAKE_C_FLAGS
/ CMAKE_CXX_FLAGS
avec / MT
.
Cela peut être fait par les commandes suivantes:
string(REGEX REPLACE "/MD" "/MT" CMAKE_C_FLAGS "${CMAKE_C_FLAGS}") string(REGEX REPLACE "/MD" "/MT" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
Pour une solution complète, veuillez consulter le message suivant
Autre option:
set_target_properties(TARGET_LIB PROPERTIES COMPILE_OPTIONS "$<$<CONFIG:Debug>:/MTd>$<$<CONFIG:Release>:/MT>" )
Double possible de stackoverflow.com/questions/10113017 /…