提问者:小点点

在cmakelists.txt的install函数中。cmake文件有什么用?


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个答案

匿名用户

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

config.cmake文件是包配置文件。 它们对于提供有关已安装包的最小信息集非常有用,因此包的使用者可以很容易地在他们的CMake项目中使用它。 作为一个基于CMake的项目的包维护者,您被高度鼓励(坦率地说,也被期望)提供这样一个文件,因为这是其他人将您的库集成到他们的项目中的最有效的方式。

包的使用者通常使用find_package查找已安装的包:

find_package(SomePackage REQUIRED)

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

  • SomePackageConfig.cmake
  • somepackage-config.cmake

通过提供这些文件中的一个(正如install命令所支持的那样),您可以使其他人在他们自己的CMake项目中轻松使用您的包。

Craig Scott,一位CMake的共同维护者,在CppCon 2019上做了一个深入的报告,提供了关于这个主题的丰富信息。

匿名用户

find_package使用config.cmake<小写-name>-config.cmake文件查找库及其元信息。

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