¿Cómo le digo a CMake que enlace en una biblioteca estática en el directorio de origen?
static-libraries (3)
Tengo un pequeño proyecto con un Makefile que estoy tratando de convertir a CMake, principalmente para obtener experiencia con CMake. Para los propósitos de este ejemplo, el proyecto contiene un archivo de origen (C ++, aunque no creo que el lenguaje sea particularmente relevante) y un archivo de biblioteca estático que he copiado de otra parte. Supongamos, por el bien del argumento, que el código fuente de la biblioteca no está disponible; Solo tengo el archivo .a y el encabezado correspondiente.
Mi Makefile hecho a mano contiene esta regla de compilación:
main: main.o libbingitup.a
g++ -o main main.o libbingitup.a
que funciona bien. ¿Cómo le digo a CMake que reproduzca esto? No literalmente este archivo make, exactamente, por supuesto, sino algo que incluye un comando de enlace equivalente. He intentado las formas obvias pero ingenuas, como
add_executable(main main.cpp libbingitup.a)
o
add_executable(main main.cpp)
target_link_libraries(main libbingitup.a)
así como varias cosas con link_directories(.)
o add_library(bingitup STATIC IMPORTED)
etc., pero hasta ahora nada que se traduzca en un enlace exitoso. ¿Qué debería estar haciendo?
Detalles de la versión: CMake 2.8.7 en Linux (Kubuntu 12.04) con GCC 4.6.3
CMake favorece que se pase la ruta completa a las bibliotecas de enlaces, por lo que, suponiendo que libbingitup.a esté en ${CMAKE_SOURCE_DIR}
, debe hacer lo siguiente:
add_executable(main main.cpp)
target_link_libraries(main ${CMAKE_SOURCE_DIR}/libbingitup.a)
Encontré esto útil ...
http://www.cmake.org/pipermail/cmake/2011-June/045222.html
De su ejemplo:
ADD_LIBRARY(boost_unit_test_framework STATIC IMPORTED)
SET_TARGET_PROPERTIES(boost_unit_test_framework PROPERTIES IMPORTED_LOCATION /usr/lib/libboost_unit_test_framework.a)
TARGET_LINK_LIBRARIES(mytarget A boost_unit_test_framework C)
Si no desea incluir la ruta completa, puede hacerlo
add_executable(main main.cpp)
target_link_libraries(main bingitup)
bingitup
es el mismo nombre que le darías a un destino si creas la biblioteca estática en un proyecto CMake:
add_library(bingitup STATIC bingitup.cpp)
CMake agrega automáticamente la lib
y la .a
al frente en Linux, y .lib
al final en Windows.
Si la biblioteca es externa, es posible que desee agregar la ruta a la biblioteca usando
link_directories(/path/to/libraries/)