Какая польза от файлов .cmake в функции установки CMakeLists.txt?

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 ответа

Решение

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

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

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

find_package(SomePackage REQUIRED)

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

  • SomePackageConfig.cmake
  • somepackage-config.cmake

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

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

<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

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