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
.