Как сообщить CMake ссылку в статической библиотеке в исходном каталоге?
У меня есть небольшой проект с Makefile, который я пытаюсь преобразовать в CMake, в основном, чтобы получить опыт работы с CMake. Для целей этого примера проект содержит исходный файл (С++, хотя я не думаю, что язык особенно уместен) и файл статической библиотеки, который я скопировал из другого места. Предположим, что исходный код библиотеки недоступен; У меня есть только файл .a и соответствующий заголовок.
Мой ручной файл Makefile содержит это правило сборки:
main: main.o libbingitup.a
g++ -o main main.o libbingitup.a
который отлично работает. Как сообщить CMake, чтобы воспроизвести это? Не в буквальном смысле этот точный makefile, конечно, но что-то, что включает в себя эквивалентную команду связывания. Я пробовал очевидные, но наивные способы, например
add_executable(main main.cpp libbingitup.a)
или
add_executable(main main.cpp)
target_link_libraries(main libbingitup.a)
а также различные вещи с link_directories(.)
или add_library(bingitup STATIC IMPORTED)
и т.д., но пока ничего не приводит к успешной увязке. Что я должен делать?
Сведения о версии: CMake 2.8.7 на Linux (Kubuntu 12.04) с GCC 4.6.3
Ответы
Ответ 1
CMake способствует передаче полного пути для связывания библиотек, поэтому, если libbingitup.a находится в ${CMAKE_SOURCE_DIR}
, выполнение следующего должно быть успешным:
add_executable(main main.cpp)
target_link_libraries(main ${CMAKE_SOURCE_DIR}/libbingitup.a)
Ответ 2
Я нашел это полезным...
http://www.cmake.org/pipermail/cmake/2011-June/045222.html
Из своего примера:
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)
Ответ 3
Если вы не хотите включать полный путь, вы можете сделать
add_executable(main main.cpp)
target_link_libraries(main bingitup)
bingitup
- это то же имя, которое вы дадите цели, если вы создадите статическую библиотеку в проекте CMake:
add_library(bingitup STATIC bingitup.cpp)
CMake автоматически добавляет lib
и .a
в начало в Linux и .lib
в конце в Windows.
Если библиотека является внешней, вы можете добавить путь к библиотеке, используя
link_directories(/path/to/libraries/)