Recherche…


Syntaxe

  • add_executable (target_name [EXCLUDE_FROM_ALL] source1 [source2 ...])
  • add_library (lib_name [STATIC | SHARED | MODULE] [EXCLUDE_FROM_ALL] source1 [source2 ...])

Des exécutables

Pour créer une cible de génération produisant un exécutable, il faut utiliser la commande add_executable :

add_executable(my_exe
               main.cpp
               utilities.cpp)

Cela crée une cible de génération, par exemple make my_exe pour GNU make, avec les make my_exe appropriés du compilateur configuré pour produire un exécutable my_exe partir des deux fichiers sources main.cpp et utilities.cpp .

Par défaut, toutes les cibles exécutables sont ajoutées à all cibles intégrées ( all pour GNU make, BUILD_ALL pour BUILD_ALL ).
Pour exclure un exécutable d'être construit avec la valeur par défaut all les cibles, on peut ajouter le paramètre optionnel EXCLUDE_FROM_ALL juste après le nom de la cible:

add_executable(my_optional_exe EXCLUDE_FROM_ALL main.cpp)

Bibliothèques

Pour créer une cible de génération qui crée une bibliothèque, utilisez la commande add_library :

add_library(my_lib lib.cpp)

La variable CMake BUILD_SHARED_LIBS contrôle à quel moment créer une bibliothèque statique ( OFF ) ou partagée ( ON ), en utilisant par exemple cmake .. -DBUILD_SHARED_LIBS=ON . Cependant, vous pouvez explicitement définir une bibliothèque partagée ou statique en ajoutant STATIC ou SHARED après le nom de la cible:

add_library(my_shared_lib SHARED lib.cpp) # Builds an shared library
add_library(my_static_lib STATIC lib.cpp) # Builds an static library

Le fichier de sortie réel diffère entre les systèmes. Par exemple, une bibliothèque partagée sur les systèmes Unix est généralement appelée libmy_shared_library.so , mais sous Windows, il s'agirait de my_shared_library.dll et de my_shared_library.lib .

Comme add_executable , ajoutez EXCLUDE_FROM_ALL avant la liste des fichiers sources pour l'exclure de la cible all :

add_library(my_lib EXCLUDE_FROM_ALL lib.cpp)

Les bibliothèques conçues pour être chargées à l'exécution (par exemple des plugins ou des applications utilisant quelque chose comme dlopen ) doivent utiliser MODULE au lieu de SHARED / STATIC :

add_library(my_module_lib MODULE lib.cpp)

Par exemple, sous Windows, il n'y aura pas de fichier d'importation ( .lib ), car les symboles sont directement exportés dans le fichier .dll .



Modified text is an extract of the original Stack Overflow Documentation
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow