CMakeLists.txt 的安装功能中.cmake 文件的用途是什么?
What is the use of .cmake files in install function of 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
没有提供?为什么用在上面的案例中?
<name>Config.cmake
或 <lower-case-name>-config.cmake
文件被 find_package 用于查找库及其元信息。
当有人想在他们的应用程序或库中 link pipeline_controller
库时,可以使用 find_package(pipeline_controller)
来完成。在内部 find_package
搜索并使用 pipeline_controllerConfig.cmake
或 pipeline_controller-config.cmake
您可能会发现介绍性描述 here 很有帮助。
<Package>Config.cmake
个文件是 package configuration 个文件。它们对于提供有关已安装包的最小信息集很有用,因此包的 消费者 可以轻松地在他们的 CMake 项目中使用它。作为基于 CMake 的项目的包维护者,我们非常鼓励(并且坦率地说,期望)提供这样的文件,因为这是其他人将您的库集成到他们的项目中的最有效方式。
您的软件包的使用者通常会使用 find_package
来查找已安装的软件包:
find_package(SomePackage REQUIRED)
find_package
Config Mode 的搜索过程将查找以下包配置文件之一以将 SomePackage
拉入 CMake 项目:
SomePackageConfig.cmake
somepackage-config.cmake
通过提供这些文件之一(如 install
命令支持),您可以让其他人在他们自己的 CMake 项目中轻松使用您的包。
Craig Scott 是 CMake 的共同维护者,在 CppCon 2019 上进行了深入的介绍,提供了有关该主题的大量信息。
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
没有提供?为什么用在上面的案例中?
<name>Config.cmake
或 <lower-case-name>-config.cmake
文件被 find_package 用于查找库及其元信息。
当有人想在他们的应用程序或库中 link pipeline_controller
库时,可以使用 find_package(pipeline_controller)
来完成。在内部 find_package
搜索并使用 pipeline_controllerConfig.cmake
或 pipeline_controller-config.cmake
您可能会发现介绍性描述 here 很有帮助。
<Package>Config.cmake
个文件是 package configuration 个文件。它们对于提供有关已安装包的最小信息集很有用,因此包的 消费者 可以轻松地在他们的 CMake 项目中使用它。作为基于 CMake 的项目的包维护者,我们非常鼓励(并且坦率地说,期望)提供这样的文件,因为这是其他人将您的库集成到他们的项目中的最有效方式。
您的软件包的使用者通常会使用 find_package
来查找已安装的软件包:
find_package(SomePackage REQUIRED)
find_package
Config Mode 的搜索过程将查找以下包配置文件之一以将 SomePackage
拉入 CMake 项目:
SomePackageConfig.cmake
somepackage-config.cmake
通过提供这些文件之一(如 install
命令支持),您可以让其他人在他们自己的 CMake 项目中轻松使用您的包。
Craig Scott 是 CMake 的共同维护者,在 CppCon 2019 上进行了深入的介绍,提供了有关该主题的大量信息。