2

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

4

2 回答 2

2

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

这些<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 在CppCon 2019上进行了深入介绍,提供了有关该主题的大量信息。

于 2020-07-13T13:04:48.587 回答
1

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

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

于 2020-07-13T12:50:56.030 回答