Как связать самостоятельно скомпилированный libgpiod в cmake
Мне нужно связать привязки С++libgpiod
к моему проекту, но я не могу понять, как это сделать. Я провел некоторое исследование в последние несколько дней, но безуспешно, и теперь я застрял.
Я хотел бы добавить репо в качестве подмодуля, построить модуль, а затем связать его с модулем, чтобы я мог перемещать сгенерированные двоичные файлы (включая двоичные файлы модуля) на целевое устройство.
Я не могу просто установить библиотеку через пакетный менеджер, т.к. устройства, на которые должна быть установлена библиотека, не имеют выхода в интернет. Я мог бы загрузить пакет и отправить его с двоичными файлами (мое лучшее решение на данный момент), но я бы предпочел «автономную» сборку.
Структура моего проекта выглядит примерно так:
dependencies/
├─ libgpiod/
CMakeLists.txt
main.cpp
и мои CMakeLists выглядят так:
cmake_minimum_required(VERSION 3.16.3)
project(my_project VERSION 0.1.0)
set(CMAKE_CXX_STANDARD 20)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(GPIOD_DIR ${CMAKE_CURRENT_SOURCE_DIR}/dependencies/libgpiod)
set(GPIOD_BIN ${CMAKE_CURRENT_BINARY_DIR}/dependencies/libgpiod)
set(GPIOD_LIB_DIR ${GPIOD_BIN}/lib)
set(GPIOD_INCLUDE_DIR ${GPIOD_BIN}/include)
ExternalProject_Add(libgpiod-project
PREFIX ${GPIOD_BIN}
SOURCE_DIR ${GPIOD_DIR}
CONFIGURE_COMMAND ${GPIOD_DIR}/autogen.sh --enable-tools=no --prefix=${GPIOD_BIN} --enable-bindings-cxx
BUILD_COMMAND make && make install
# INSTALL_COMMAND make install
BUILD_BYPRODUCTS ${GPIOD_LIB_DIR}/libgpiodcxx.so
)
add_executable(my_project main.cpp)
target_link_libraries(my_project PRIVATE
# todo what to link against?
)
Исходный код также доступен на GitHub .