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
没有提供什么? 为什么在上述案例中使用它?
您可能会发现这里的介绍性描述很有帮助。
文件是包配置文件。 它们对于提供有关已安装包的最小信息集非常有用,因此包的使用者可以很容易地在他们的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使用
或<小写-name>-config.cmake
文件查找库及其元信息。
当有人想要链接其应用程序或库中的pipeline_controller
库时,可以使用find_package(pipeline_controller)
来完成。 在内部find_package
搜索并使用pipeline_controllerconfig.cmake
或pipeline_controller-config.cmake