Где должны быть установлены файлы cmake? - PullRequest
2 голосов
/ 25 апреля 2019

Где должны быть установлены файлы cmake?В настоящее время у меня есть цели установки

cmake_minimum_required(VERSION 2.8.10)
project(projectname)
include(CMakePackageConfigHelpers)
include(GNUInstallDirs)

add_library(projectnameINTERFACE)
target_include_directories(projectnameINTERFACE
        $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}/projectname>
        $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/>
)


configure_package_config_file(projectnameConfig.cmake.in ${CMAKE_CURRENT_BINARY_DIR}/projectnameConfig.cmake INSTALL_DESTINATION ${CMAKE_INSTALL_PREFIX})
install(TARGETS projectnameEXPORT projectname-targets)

install(EXPORT projectname-targets FILE projectnameTargets.cmake DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/cmake)
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/projectnameConfig.cmake DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/cmake)
install(DIRECTORY ./ DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/projectname FILES_MATCHING PATTERN "*.h" PATTERN ".git" EXCLUDE)

Правильный ли путь ${CMAKE_INSTALL_PREFIX}/share/projectname/cmake?

Для сборок Windows он должен быть установлен с CMAKE_INSTALL_PREFIX=C:/libs/project.При установке в Linux с CMAKE_INSTALL_PREFIX=/usr или /usr/local я не уверен, должны ли файлы cmake быть установлены в /usr/share/cmake или аналогичной папке.

В конце концов, он должен работать с обоими методами(/usr и path/to/libdir) разумным образом.

1 Ответ

2 голосов
/ 26 апреля 2019

Согласно официальной документации cmake, есть несколько возможностей, где эти файлы cmake должны быть установлены.Расположение важно для того, чтобы найти библиотеку с помощью команды find_package().В зависимости от платформы возможны следующие местоположения:

<prefix>/                                                       (Windows)
<prefix>/(cmake|CMake)/                                         (Windows)
<prefix>/<name>*/                                               (Windows)
<prefix>/<name>*/(cmake|CMake)/                                 (Windows)
<prefix>/(lib/<arch>|lib*|share)/cmake/<name>*/                 (Unix)
<prefix>/(lib/<arch>|lib*|share)/<name>*/                       (Unix)
<prefix>/(lib/<arch>|lib*|share)/<name>*/(cmake|CMake)/         (Unix)
<prefix>/<name>*/(lib/<arch>|lib*|share)/cmake/<name>*/         (Windows/Unix)
<prefix>/<name>*/(lib/<arch>|lib*|share)/<name>*/               (Windows/Unix)
<prefix>/<name>*/(lib/<arch>|lib*|share)/<name>*/(cmake|CMake)/ (Windows/Unix)
<prefix>/<name>.framework/Resources/                            (macOS)
<prefix>/<name>.framework/Resources/CMake/                      (macOS)
<prefix>/<name>.framework/Versions/*/Resources/                 (macOS)
<prefix>/<name>.framework/Versions/*/Resources/CMake/           (macOS)
<prefix>/<name>.app/Contents/Resources/                         (macOS)
<prefix>/<name>.app/Contents/Resources/CMake/                   (macOS)

Префикс определяется переменной CMAKE_INSTALL_PREFIX, которая по умолчанию равна C:/Program Files/${PROJECT_NAME} в Windows и /usr/local в Unix.

В моемВ системе Arch Linux большинство библиотек используют расположение <prefix>/lib*/cmake/<name>*/ (стиль Unix).Для Windows лично я бы предпочел местоположение <prefix>/cmake.

Для более подробной информации я бы порекомендовал вам прочитать официальную документацию для вашей версии CMake (для v3.14 см. Ссылки в ссылках ниже).

Ссылки :

  1. https://cmake.org/cmake/help/v3.14/variable/CMAKE_INSTALL_PREFIX.html
  2. https://cmake.org/cmake/help/v3.14/command/find_package.html?highlight=find_package#id5
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...