Экспорт целей CMake для проекта Autotools - PullRequest
0 голосов
/ 15 октября 2018

Во многих разных местах я нашел это руководство: «Upstreams должен поддерживать современный целевой дизайн downstream».

Так что я имею дело с проектом на основе Autotool, и я смог построить разумный *Файл 1003 *, который анализируется и используется Autoconf в качестве шаблона.

get_filename_component(LibUsbgx_CMAKE_DIR "${CMAKE_CURRENT_LIST_FILE}" PATH)
include(CMakeFindDependencyMacro)

list(APPEND CMAKE_MODULE_PATH ${LibUsbgx_CMAKE_DIR})
list(REMOVE_AT CMAKE_MODULE_PATH -1)

set (prefix @prefix@)
set (exec_prefix @exec_prefix@)
set (libdir @libdir@)
set (includedir @includedir@)

set(LibUsbgx_INCLUDE_DIRS "@includedir@")

if(NOT TARGET LibUsbgx::LibUsbgx)
    add_library(LibUsbgx::LibUsbgx SHARED IMPORTED)
    set_property(TARGET LibUsbgx::LibUsbgx APPEND PROPERTY IMPORTED_CONFIGURATIONS RELEASE)

    set_target_properties(LibUsbgx::LibUsbgx PROPERTIES 
        IMPORTED_LOCATION "@libdir@/libusbgx.so"
        INTERFACE_INCLUDE_DIRECTORIES "@includedir@")
endif()

unset (prefix)
unset (exec_prefix)
unset (libdir)
unset (includedir)

set(LibUsbgx_LIBRARIES LibUsbgx::LibUsbgx)

Два вопроса:

  1. Мне пришлось использовать твик, чтобы он работал, потому что @libdir@расширен до ${prefix}/lib и не на полном пути;Есть ли способ избежать этого взлома?
  2. При кросс-компиляции он не может работать, потому что @prefix@ расширяется до /usr, поэтому пути являются абсолютными, но кросс-компиляция требует, чтобы они были относительно системного пути.Как я могу это исправить?

Спасибо

1 Ответ

0 голосов
/ 15 октября 2018

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

# Compute the installation prefix relative to this file.
get_filename_component(_IMPORT_PREFIX "${CMAKE_CURRENT_LIST_FILE}" PATH)
get_filename_component(_IMPORT_PREFIX "${_IMPORT_PREFIX}" PATH)
get_filename_component(_IMPORT_PREFIX "${_IMPORT_PREFIX}" PATH)
get_filename_component(_IMPORT_PREFIX "${_IMPORT_PREFIX}" PATH)
if(_IMPORT_PREFIX STREQUAL "/")
  set(_IMPORT_PREFIX "")
endif()
set(LibUsbgx_INCLUDE_DIRS "${_IMPORT_PREFIX}/include")

if(NOT TARGET LibUsbgx::LibUsbgx)
    add_library(LibUsbgx::LibUsbgx SHARED IMPORTED)
    set_property(TARGET LibUsbgx::LibUsbgx APPEND PROPERTY IMPORTED_CONFIGURATIONS RELEASE)

    set_target_properties(LibUsbgx::LibUsbgx PROPERTIES 
        IMPORTED_LOCATION "${_IMPORT_PREFIX}/lib/libusbgx.so"
        INTERFACE_INCLUDE_DIRECTORIES "${_IMPORT_PREFIX}/include")
endif()

Я не уверен, что это правильный способ сделать это с проектом autotools,потому что libdir, includesir и т. д. могут быть изменены с помощью configure в проекте.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...