Как добавить встроенную статическую библиотеку в проект с помощью CMake?

Clion: как добавить или (использовать) встроенную статическую библиотеку в мой проект?

3 ответов


вы, вероятно, спрашиваете о том, как связать свой проект с предварительно построенной статической библиотеки. Если это так, вы можете сделать это, позвонив target_link_libraries.

предположим, что ваш проект называется myProj и встроенная библиотека myLib.lib, вы можете сделать так:

target_link_libraries(myProj myLib)

Ваш вопрос не связан с CLion, это чистый CMake. Измените CMakeLists.txt из вашего проекта и использовать add_library. The документация CMake может быть полезным.

Я неправильно понял вопрос, target_link_library вероятно, это ответ на вопрос.


мне было очень трудно сделать эту работу, так как я был совершенно новым для Клиона и CMake.

в моем сценарии я брал класс, который требовал, чтобы мы использовали библиотеку курсов в каждом проекте.

предполагая, что у вас есть библиотека под названием libClassLibrary.a, сделайте следующее в CMakeLists.txt в корне проекта:

во-первых, найти место библиотеки:

find_library(LIB_TO_INCLUDE ClassLibrary /path/to/your/library)

LIB_TO_INCLUDE будет содержать местоположение библиотеки, предполагая, что она найдена. Заметить что хардкодить путь может быть проблематичным, если вы хотите, чтобы ваше решение можно переносить в другие системы. Можно добавить дополнительные пути поиска, разделенные пробелом, если библиотека может существовать в нескольких местах. Типичным примером является включение общих мест установки, таких как /usr/bin /usr/local/bin etc.

далее убедитесь, что файлы заголовков (если применимо) включены в пути поиска заголовков:

find_path (LIB_INCLUDES ClassLibrary.h /path/to/header/files)

опять же, включите несколько путей поиска, если заголовки могут быть загружены в несколько мест. Если существует несколько заголовочных файлов, вам нужно будет включить их все.

теперь включите каталоги, используя :

include_directories(${LIB_INCLUDES})

выше будет инструктировать систему сборки для поиска всех каталогов, содержащихся в LIB_INCLUDES или как вы решите это назвать.

наконец, добавьте исполняемый файл и использовать по ссылке libClassLibrary.a.

add_executable(MyExecutable main.cpp)
target_link_libraries(MyExecutable ${LIB_TO_INCLUDE})

вот и все. Вы заметите, что под "Внешние библиотеки" > "пути поиска заголовков" в окне организатор проекта отображаются каталоги, содержащие файлы заголовков.

PS-книга Освоение CMake Кен Мартин и Билл Хоффманн является бесценным ресурсом.