Même source, tout cela, je veux juste une version statique et partagée à la fois. Facile à faire?
Réponses
Trop de publicités?Oui, c'est assez facile. Utiliser deux "add_library" des commandes:
add_library(MyLib SHARED source1.c source2.c)
add_library(MyLibStatic STATIC source1.c source2.c)
Même si vous disposez de plusieurs fichiers source, vous devez placer la liste des sources dans un cmake variable, il est donc toujours facile à faire.
Sur Windows, vous devez sans doute donner à chaque bibliothèque un nom différent, car il y a un ".lib" fichier partagé et statique. Mais sur Linux et Mac, vous pouvez même donner à la fois des bibliothèques le même nom (par exemple, libMyLib.un et libMyLib.donc):
set_target_properties(MyLibStatic PROPERTIES OUTPUT_NAME MyLib)
Mais je ne recommande pas de donner à la fois statique et dynamique des versions de la bibliothèque du même nom. Je préfère utiliser des noms différents parce que cela rend plus facile de choisir statique vs dynamique de liaison sur la ligne de compilation pour les outils que le lien vers la bibliothèque. Habituellement, je choisis des noms comme libMyLib.(partagée) et libMyLib_static.un (statique). (Ceux qui seraient les noms sur linux.)
Il n’est généralement pas nécessaire de dupliquer les appels ADD_LIBRARY à cette fin. Juste utiliser
$> man cmake | grep -A6 '^ *BUILD_SHARED_LIBS$'
BUILD_SHARED_LIBS
Global flag to cause add_library to create shared libraries if on.
If present and true, this will cause all libraries to be built shared unless the library was
explicitly added as a static library. This variable is often added to projects as an OPTION
so that each user of a project can decide if they want to build the project using shared or
static libraries.
en construisant d'abord (dans un répertoire hors source) avec -DBUILD_SHARED_LIBS: BOOL = ON et avec OFF dans l'autre