在CMakeLists.txt的安装功能中使用.cmake文件有什么用

What is the use of .cmake files in install function of CMakeLists.txt?

本文关键字:cmake 文件 什么 txt CMakeLists 安装 功能      更新时间:2023-10-16

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没有?为什么在上述情况下使用它?

您可能会发现这里的介绍性描述很有帮助。

<Package>Config.cmake文件是程序包配置文件。它们对于提供有关已安装程序包的最小信息集非常有用,因此程序包的使用者可以在其CMake项目中轻松使用它。作为一个基于CMake的项目的包维护者,我们强烈鼓励(坦率地说,希望(提供这样一个文件,因为这是其他人将您的库集成到他们的项目中最有效的方式。

软件包的消费者通常会使用find_package来查找已安装的软件包:

find_package(SomePackage REQUIRED)

find_package配置模式的搜索过程将查找以下包配置文件之一,以将SomePackage拉入CMake项目:

  • SomePackageConfig.cmake
  • somepackage-config.cmake

通过提供其中一个文件(install命令支持(,您可以让其他人在自己的CMake项目中轻松使用您的包。

CMake联合维护人员Craig Scott在2019年CppCon上进行了深入的演示,提供了有关该主题的丰富信息。

find_package使用

<name>Config.cmake<lower-case-name>-config.cmake文件来查找库及其元信息。

当有人想在他们的应用程序或库中链接pipeline_controller库时,可以使用find_package(pipeline_controller)来完成。find_package内部搜索并使用pipeline_controllerConfig.cmakepipeline_controller-config.cmake