Какая польза от файлов .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