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 .