cmake
Construire des cibles
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
.