Какая польза от файлов .cmake в функции установки CMakeLists.txt? - PullRequest
1 голос
/ 13 июля 2020

CMakeLists.txt

...
add_library( ${PROJECT_NAME} SHARED src/run_pipeline.cpp )

target_link_libraries( ${PROJECT_NAME} )
install( TARGETS ${PROJECT_NAME} DESTINATION lib )
install( FILES ${PROJECT_NAME}Config.cmake DESTINATION lib/cmake/${PROJECT_NAME} )

Этот ${PROJECT_NAME}Config.cmake файл:

add_library( pipeline_controller STATIC IMPORTED)

find_library( PIPELINE_CONTROLLER_LIBRARY_PATH pipeline_controller HINTS "${CMAKE_CURRENT_LIST_DIR}/install/lib/")

set_target_properties( pipeline_controller PROPERTIES IMPORTED_LOCATION "${PIPELINE_CONTROLLER_LIBRARY_PATH}")

В каких случаях нам нужен отдельный файл .cmake? Что дает .cmake, а CMakeLists.txt нет? Почему он используется в приведенном выше случае?

Ответы [ 2 ]

1 голос
/ 13 июля 2020

Вы можете найти здесь вводное описание полезным.

Файлы <Package>Config.cmake - это файлы конфигурации пакета . Они полезны для предоставления минимального набора информации об установленном пакете, поэтому потребитель пакета может легко использовать его в своем проекте CMake. Как специалист по сопровождению пакета проекта на основе CMake, вам настоятельно рекомендуется (и, честно говоря, ожидается) предоставить такой файл, поскольку для других это наиболее эффективный способ интеграции вашей библиотеки в свой проект.

Потребитель вашего пакета обычно будет использовать find_package, чтобы найти установленный пакет:

find_package(SomePackage REQUIRED)

Процедура поиска find_package Config Mode будет искать один из следующих файлов конфигурации пакета для извлечения SomePackage в проект CMake:

  • SomePackageConfig.cmake
  • somepackage-config.cmake

Предоставляя один этих файлов (как поддерживает команда install), вы упрощаете другим пользователям использование вашего пакета в их собственном проекте CMake.

Крейг Скотт, соавтор CMake, провел подробное выступление на CppCon 2019 , где можно найти подробную информацию об этом топи c.

1 голос
/ 13 июля 2020

<name>Config.cmake или <lower-case-name>-config.cmake файлы используются find_package для поиска библиотеки и ее метаинформации.

Когда кто-то хочет связать библиотеку pipeline_controller в своем приложении или библиотеке , это делается с помощью find_package(pipeline_controller). Внутренне find_package ищет и использует pipeline_controllerConfig.cmake или pipeline_controller-config.cmake

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