1
votes

Liaison statique de fichiers .lib dans cmake

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>


1 commentaires

3 Réponses :


0
votes

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

Cmake doc


0 commentaires

0
votes

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


0 commentaires

0
votes

Autre option:

set_target_properties(TARGET_LIB PROPERTIES
    COMPILE_OPTIONS "$<$<CONFIG:Debug>:/MTd>$<$<CONFIG:Release>:/MT>"
    )


0 commentaires