¿Cómo le digo a CMake que enlace en una biblioteca estática en el directorio de origen?

Tengo un pequeño proyecto con un Makefile que estoy tratando de convertir a CMake, principalmente para obtener experiencia con CMake. A los efectos de este ejemplo, el proyecto contiene un archivo fuente (C ++, aunque no creo que el idioma sea particularmente relevante) y un archivo de biblioteca estática que he copiado de otro lugar. Supongamos por el argumento de 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 comstackció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 exacto, 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 nada hasta ahora que resulte 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 está a favor de pasar la ruta completa para vincular bibliotecas, por lo que suponiendo que libbingitup.a está en ${CMAKE_SOURCE_DIR} , haciendo lo siguiente debería tener éxito:

 add_executable(main main.cpp) target_link_libraries(main ${CMAKE_SOURCE_DIR}/libbingitup.a) 

Me pareció ú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 hacer

 add_executable(main main.cpp) target_link_libraries(main bingitup) 

bingitup es el mismo nombre que le daría a un objective si crea la biblioteca estática en un proyecto CMake:

 add_library(bingitup STATIC bingitup.cpp) 

CMake agrega automáticamente lib y .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/)