cmake
Objetivos de construcción
Buscar..
Sintaxis
- add_executable (target_name [EXCLUDE_FROM_ALL] fuente1 [fuente2 ...])
- add_library (lib_name [ESTÁTICA | COMPARTIDO | MÓDULO] [EXCLUDE_FROM_ALL] fuente1 [fuente2 ...])
Ejecutables
Para crear un objetivo de compilación que produzca un ejecutable, se debe usar el comando add_executable
:
add_executable(my_exe
main.cpp
utilities.cpp)
Esto crea un destino de compilación, por ejemplo, make my_exe
para GNU make, con las invocaciones adecuadas del compilador configurado para producir un ejecutable my_exe
desde los dos archivos de origen main.cpp
y utilities.cpp
.
De forma predeterminada, todos los destinos ejecutables se agregan a all
objetivos BUILD_ALL
( all
para GNU make, BUILD_ALL
para BUILD_ALL
).
Para excluir un archivo ejecutable que se construyan con el valor por defecto all
objetivo, se puede agregar el parámetro opcional EXCLUDE_FROM_ALL
justo después del nombre de destino:
add_executable(my_optional_exe EXCLUDE_FROM_ALL main.cpp)
Bibliotecas
Para crear un destino de compilación que cree una biblioteca, use el comando add_library
:
add_library(my_lib lib.cpp)
La variable CMake BUILD_SHARED_LIBS
controla cada vez que se construye una biblioteca estática ( OFF
) o compartida ( ON
), utilizando por ejemplo cmake .. -DBUILD_SHARED_LIBS=ON
. Sin embargo, puede establecer explícitamente la construcción de una biblioteca compartida o estática agregando STATIC
o SHARED
después del nombre de destino:
add_library(my_shared_lib SHARED lib.cpp) # Builds an shared library
add_library(my_static_lib STATIC lib.cpp) # Builds an static library
El archivo de salida real difiere entre los sistemas. Por ejemplo, una biblioteca compartida en sistemas Unix generalmente se llama libmy_shared_library.so
, pero en Windows sería my_shared_library.dll
y my_shared_library.lib
.
Al igual que add_executable
, agregue EXCLUDE_FROM_ALL
antes de la lista de archivos de origen para excluirlo de all
destinos:
add_library(my_lib EXCLUDE_FROM_ALL lib.cpp)
Las bibliotecas, que están diseñadas para cargarse en tiempo de ejecución (por ejemplo, complementos o aplicaciones que usan algo como dlopen
), deben usar MODULE
lugar de SHARED
/ STATIC
:
add_library(my_module_lib MODULE lib.cpp)
Por ejemplo, en Windows, no habrá un archivo de importación ( .lib
), porque los símbolos se exportan directamente en el archivo .dll
.