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 .



Modified text is an extract of the original Stack Overflow Documentation
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow