cmake
Costruisci obiettivi
Ricerca…
Sintassi
- add_executable (nome_destinazione [EXCLUDE_FROM_ALL] source1 [source2 ...])
- add_library (lib_name [STATIC | SHARED | MODULE] [EXCLUDE_FROM_ALL] source1 [source2 ...])
eseguibili
Per creare un target di build che produca un eseguibile, si dovrebbe usare il comando add_executable :
add_executable(my_exe
main.cpp
utilities.cpp)
Questo crea un target di build, ad esempio make my_exe per GNU make, con le invocazioni appropriate del compilatore configurato per produrre un file eseguibile my_exe dai due file di origine main.cpp e utilities.cpp .
Per impostazione predefinita, tutti i target eseguibili vengono aggiunti a all target incorporati ( all per GNU make, BUILD_ALL per MSVC).
Per escludere un eseguibile da essere costruito con il target predefinito all , è possibile aggiungere il parametro opzionale EXCLUDE_FROM_ALL subito dopo il nome di destinazione:
add_executable(my_optional_exe EXCLUDE_FROM_ALL main.cpp)
biblioteche
Per creare un target di build che crea una libreria, utilizzare il comando add_library :
add_library(my_lib lib.cpp)
La variabile CMake BUILD_SHARED_LIBS controlla ogni volta che crea una libreria statica ( OFF ) o condivisa ( ON ), utilizzando ad esempio cmake .. -DBUILD_SHARED_LIBS=ON . Tuttavia, puoi impostare in modo esplicito la creazione di una libreria condivisa o statica aggiungendo STATIC o SHARED dopo il nome di destinazione:
add_library(my_shared_lib SHARED lib.cpp) # Builds an shared library
add_library(my_static_lib STATIC lib.cpp) # Builds an static library
Il file di output effettivo differisce tra i sistemi. Ad esempio, una libreria condivisa su sistemi Unix viene solitamente chiamata libmy_shared_library.so , ma su Windows sarebbe my_shared_library.dll e my_shared_library.lib .
Come add_executable , aggiungi EXCLUDE_FROM_ALL prima dell'elenco dei file di origine per escluderlo da all target:
add_library(my_lib EXCLUDE_FROM_ALL lib.cpp)
Le librerie, progettate per essere caricate in fase di runtime (ad esempio plugin o applicazioni che utilizzano qualcosa come dlopen ), dovrebbero usare MODULE invece di SHARED / STATIC :
add_library(my_module_lib MODULE lib.cpp)
Ad esempio, su Windows, non ci sarà un file di importazione ( .lib ), perché i simboli vengono esportati direttamente nel file .dll .