Как связать самостоятельно скомпилированный 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 .

0 ответов

Другие вопросы по тегам