Добавить библиотеку в проект Cmake

Возможно, я просто не могу его найти, но я хочу добавить некоторый код в мой проект (libunwind находится здесь http://www.nongnu.org/libunwind/download.html)
Эта библиотека не поставляется с файлом CMakeLists.txt, и когда я пытаюсь включить его, cmake жалуется на этот факт. Прямо сейчас я просто добавил каталог libunwind во внешний код и добавил ссылку в свой основной CMakeLists.txt.

Любой вклад был бы великолепен.

1

Решение

Если вы хотите создать его каждый раз вместе с вашим проектом, самый простой способ будет:

  • Добавьте исходный код где-нибудь в дерево вашего проекта
  • Добавить пользовательская цель CMake который должен работать до начала компиляции
  • В этой пользовательской цели выполните все необходимое для компиляции библиотеки (в вашем случае это ./configure -> make -> make install.

Однако это редко требуется, и в большинстве случаев вам нужно просто собрать библиотеку один раз и связать ее как любую другую внешнюю библиотеку.

2

Другие решения

Работая с библиотеками, у вас есть 2 варианта:

  1. Если вы скачали и смогли собрать и установить его, попробуйте найти его позже внутри CMAKE, как это (в случае Boost), и ссылку на свою цель:

    find_package (Boost COMPONENTS поток_системы дата-время поток program_options файловая система unit_test_framework regex chrono REQUIRED)

    если (НЕ Boost_FOUND)
    сообщение (FATAL_ERROR «Не удается найти повышение!»)
    endif (НЕ Boost_FOUND)

    сообщение (СОСТОЯНИЕ «усиление найдено»)

    include_directories ($ {Boost_INCLUDE_DIRS})
    каталоги ссылок ($ {Boost_LIBRARY_DIRS})

    target_link_libraries (YOUR_TARGET_NAME $ {Boost_LIBRARIES})

  2. Вы можете добавить внешние библиотечные источники как отдельную цель и использовать что-то вроде этого для CMake, чтобы построить его:

    набор (источники
    async_waiter.h
    async_waiter_impl.h
    async_waiter_impl.cpp
    )

    add_library (async_waiter $ {sources})

и позже ссылка, на которую вы нацеливаетесь:

target_link_libraries(YOU_TARGET_NAME async_waiter)
3

По вопросам рекламы [email protected]