можете подсказать как-нибудь с данной проблемой?
Создаю header-only библиотеку свою, которую хочу залинковать к другому проекту, чтобы производить тестирование :
Конфигурация CMakeLists.txt в библиотеке следующее :
cmake_minimum_required(VERSION 3.20)
project(cmplib VERSION 1.0.0)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS OFF)
add_library(${PROJECT_NAME} INTERFACE)
target_include_directories(${PROJECT_NAME} INTERFACE compression/)
Вроде тут всё правильно, если смотреть на то, как описано это здесь : http://mariobadr.com/creating-a-header-only-library-with-cmake.html
Далее пытаюсь соединить данную библиотеку в другом своём проекте :
cmake_minimum_required(VERSION 3.20)
project(LibTesting)
set(CMAKE_CXX_STANDARD 17)
add_executable(LibTesting main.cpp)
target_link_libraries(${PROJECT_NAME} PUBLIC C://Workspace//cmplibrary)
Вопрос, почему это не хочет собирать и из-за чего?
Если указать название библиотеки в проекте, а не путь, то он напрочь отказывается собираться даже, что очень плохо.
Уточну, если это необходимо : Работа ведётся под виндой.
Слэши не в ту сторону
От этого проблема не облегчилась
Для header only library подключение библиотеки на нужно вообще, таким что о чем ты - не понятно
...Ты вообще не правильно прочитал...
Создаю header-only библиотеку свою, которую хочу залинковать к другому проекту, чтобы производить тестирование :
А как тогда её использовать
#include и всё
Я пишу header only библиотеку, которую хочу далее использовать в другом проекте для тестирования. Пытаясь создать данную библиотеку из сурсов и подключить её через target_link_library мне не давало это сделать нормально
target_link_library для header-only lib не нужен, нужен только target_include_directory
Есть гайд по созданию таких либ и их использование через CMake?
Я практически всё изложил выше , больше никаких хитростей нет.
- для обычных библиотек надо указывать - target_include_directory - target_link_library - для header-only lib - target_include_directory надо указывать - target_link_library не надо указывать
Приму к сведению, а вопрос теперь появился. Заметил, что в некоторых библиотеках есть использование find_package(), где скорее всего, как я понял нужно писать скрипт сборки. Есть ли какой-нибудь гайд по этому поводу, если я захочу сделать библиотеку пакетом
Вообще это в @probuildsystems
find_package это для поиска библиотеки на машине в виде специальных "модулей" для CMake, для которых написаны специальные инструкции CMakе по регистрации этого модуля - библиотеки.
Как раз такая тема также интересна, хотел бы сделать свой условный "модуль" позднее, если далее с этим проектом, которым занят всё получиться.
Да, можешь сделать позднее, это не обязательно.
Спасибо большое за советы и подсказки, ценю.
Это не так, target_link_libraries – универсальный инструмент в CMake, ответственный за "линковку" всех зависимостей одновременно – бинарных библиотек, заголовков, свойств (в том числе особых флагов компиляции) и пользователь header-only библиотеки именно его и будет использовать. В том числе потому что это обеспечивает более корректное построение дерева зависимостей в IDE (в новых версиях CMake)
Ну ок, может и так. Я имел в виду, что для HOбиблиотек не нужно указывать именно библиотеку объектных модулей - то, за что по идее должно отвечать target_link_libraries
Обсуждают сегодня