Подтвердить что ты не робот

Как сообщить 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

4b9b3361

Ответ 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/)