cmake
Bouw doelen
Zoeken…
Syntaxis
- add_executable (target_name [EXCLUDE_FROM_ALL] source1 [source2 ...])
- add_library (lib_name [STATIC | SHARED | MODULE] [EXCLUDE_FROM_ALL] source1 [source2 ...])
uitvoerbare
Om een build-doel te maken dat een uitvoerbaar bestand produceert, moet men de opdracht add_executable
gebruiken:
add_executable(my_exe
main.cpp
utilities.cpp)
Hiermee wordt een make my_exe
, bijvoorbeeld make my_exe
voor GNU make, met de juiste aanroepen van de geconfigureerde compiler om een uitvoerbaar my_exe
te produceren uit de twee bronbestanden main.cpp
en utilities.cpp
.
Standaard worden alle uitvoerbare doelen toegevoegd aan het ingebouwde all
doel ( all
voor GNU make, BUILD_ALL
voor MSVC).
Om een uitvoerbaar bestand uit te sluiten van het standaarddoel all
, kan men de optionele parameter EXCLUDE_FROM_ALL
direct achter de EXCLUDE_FROM_ALL
toevoegen:
add_executable(my_optional_exe EXCLUDE_FROM_ALL main.cpp)
bibliotheken
Gebruik de opdracht add_library
om een build-doel te maken dat een bibliotheek maakt:
add_library(my_lib lib.cpp)
De BUILD_SHARED_LIBS
variabele BUILD_SHARED_LIBS
regelt wanneer een statische ( OFF
) of een gedeelde ( ON
) bibliotheek wordt gebouwd, bijvoorbeeld cmake .. -DBUILD_SHARED_LIBS=ON
. U kunt echter expliciet instellen om een gedeelde of statische bibliotheek te bouwen door STATIC
of SHARED
toe te voegen na de doelnaam:
add_library(my_shared_lib SHARED lib.cpp) # Builds an shared library
add_library(my_static_lib STATIC lib.cpp) # Builds an static library
Het werkelijke uitvoerbestand verschilt tussen systemen. Een gedeelde bibliotheek op Unix-systemen wordt bijvoorbeeld meestal libmy_shared_library.so
, maar in Windows zou dit my_shared_library.dll
en my_shared_library.lib
.
Voeg EXCLUDE_FROM_ALL
als add_executable
toe vóór de lijst met bronbestanden om het van het doel all
uit te sluiten:
add_library(my_lib EXCLUDE_FROM_ALL lib.cpp)
Bibliotheken, die zijn ontworpen om tijdens runtime te worden geladen (bijvoorbeeld plug-ins of applicaties die zoiets als dlopen
), moeten MODULE
plaats van SHARED
/ STATIC
:
add_library(my_module_lib MODULE lib.cpp)
Op Windows zal er bijvoorbeeld geen importbestand ( .lib
) zijn, omdat de symbolen rechtstreeks in de .dll
worden geëxporteerd.