Установка файлов конфигурации пакета CMake для платформ MacOS - PullRequest
0 голосов
/ 13 февраля 2019

Я создал версионную платформу MacOS с CMake и наткнулся на вопрос, куда устанавливать файлы конфигурации пакета sample-config.cmake, sample-config-version.cmake, sample-exports.cmake, sample-exports-release.cmake.

Каркас имеет версию, такструктура примерно такая:

<sample.framework>
   |-- Headers                 # link to Versions/Current/Headers
   |-- Resources               # link to Versions/Current/Resources
   +-- Versions
       |-- Current             # link to B
       +-- B
           |-- Headers
           +-- Resources
               |-- CMake
               +-- Info.plist

Я использую макросы CMakes CMakePackageConfigHelpers для генерации файла конфигурации пакета из шаблона sample-config.cmake.in с содержимым

@PACKAGE_INIT@
include("${CMAKE_CURRENT_LIST_DIR}/sample-export.cmake")

CMake неупомянул версионные фреймворки и рекомендует установить файлы в каталог Resources/CMake.

Я сделал это, вызвав

install(FILES "${CMAKE_CURRENT_BINARY_DIR}/sample-config.cmake"
  DESTINATION sample.framework/Resources/CMake
  COMPONENT development
)

Сгенерированный файл выглядит так:

####### Expanded from @PACKAGE_INIT@ by configure_package_config_file() #######
####### Any changes to this file will be overwritten by the next CMake run ####
####### The input file was sample-config.cmake.in                            ########

get_filename_component(PACKAGE_PREFIX_DIR "${CMAKE_CURRENT_LIST_DIR}/../../../" ABSOLUTE)

macro(set_and_check _var _file)
  set(${_var} "${_file}")
  if(NOT EXISTS "${_file}")
    message(FATAL_ERROR "File or directory ${_file} referenced by variable ${_var} does not exist !")
  endif()
endmacro()

macro(check_required_components _NAME)
  foreach(comp ${${_NAME}_FIND_COMPONENTS})
    if(NOT ${_NAME}_${comp}_FOUND)
      if(${_NAME}_FIND_REQUIRED_${comp})
        set(${_NAME}_FOUND FALSE)
      endif()
    endif()
  endforeach()
endmacro()

include("${CMAKE_CURRENT_LIST_DIR}/sample-export.cmake")

Ошибка:

Существует разница в сгенерированном файле конфигурации, устанавливаю ли я эти файлы в Resources/CMake или в Versions/B/Resources/CMake, хотя оба указывают на один и тот же каталог.

При установке по ссылке Resources на Resources/CMake вызов для установки PACKAGE_PREFIX_DIR генерируется как

`get_filename_component(PACKAGE_PREFIX_DIR "${CMAKE_CURRENT_LIST_DIR}/../../../" ABSOLUTE)`

, но при установке через Versions/B/Resources/CMake он генерируется как

`get_filename_component(PACKAGE_PREFIX_DIR "${CMAKE_CURRENT_LIST_DIR}/../../../../../" ABSOLUTE)`

Вследствие этого пакет не может бытьfind_package(sample CONFIG). * при установке на Versions/B/Resources/CMake.

Кто-нибудь сталкивался с этой ошибкой раньше?

Спасибо за любые комментарии по этому вопросу.

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