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.