CMake: Construir una librería estática y/o dinámica
Esta receta explica cómo construir librerías estáticas y dinámicas con CMake.
Software necesario
Los ejemplos que vamos a utilizar puedes descargarlos utilizando subversion desde:$ svn co https://arco.esi.uclm.es/svn/public/samples/cmake/libstatic
$ svn co https://arco.esi.uclm.es/svn/public/samples/cmake/libshared
Librería estática
Para crear una librería estática nada más fácil que lo que sigue:CMAKE_MINIMUM_REQUIRED(VERSION 2.8)
PROJECT(libstatic)
INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR})
ADD_LIBRARY(dummy STATIC dummy.cpp)
- objetivo: se trata un nombre simbólico para el objetivo que representa el crear la librería. Si no se especifica otra cosa, este nombre se utilizará para crear el fichero final de la forma libobjetivo.a.
- STATIC: modo de la librería.
- dependencias: de qué ficheros u objetivos depende la librería para su construcción
Librería dinámica
A la vista de lo anterior, parece sencillo crear una librería dinámica. ¿Bastará cambiar STATIC por SHARED?. Sí, con eso bastaría. Pero vamos a añadir algo más para hacer que la librería sea más "distribuible":CMAKE_MINIMUM_REQUIRED(VERSION 2.8)
PROJECT(libshared)
INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR})
ADD_LIBRARY(dummy SHARED dummy.cpp)
SET_PROPERTY(TARGET dummy PROPERTY SOVERSION 1.0)
Librería estática y dinámica
Es posible que para una misma librería quieras que pueda ser enlazada de forma estática y también dinámica. Veamos una posible solución:CMAKE_MINIMUM_REQUIRED(VERSION 2.8)
PROJECT(libstaticshared)
INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR})
ADD_LIBRARY(dummy_shared SHARED dummy.cpp)
SET_PROPERTY(TARGET dummy_shared PROPERTY SOVERSION 1.0)
ADD_LIBRARY(dummy_static STATIC dummy.cpp)
SET_TARGET_PROPERTIES(dummy_shared dummy_static PROPERTIES OUTPUT_NAME dummy)
Referencias
- Documentación CMake2.8: consultar las propiedades genéricas y de los diferentes tipos abstractos (directorios, objetivos, ficheros fuente...).
[ show comments ]
blog comments powered by Disqus