【问题标题】:What is the use of .cmake files in install function of CMakeLists.txt?CMakeLists.txt的安装功能中.cmake文件有什么用?
【发布时间】:2020-11-02 15:30:13
【问题描述】:

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 documentation关于创建包的内容吗?他们提供了一个使用ClimbingStatsConfig.cmake 配置文件的示例。
  • @Tsyvarev 我不知道。我会读的。如果您能在一段中解释要点作为答案,我将不胜感激。

标签: c++ cmake compilation cmakelists-options


【解决方案1】:

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

<Package>Config.cmake 文件是 package configuration 文件。它们对于提供有关已安装包的最少信息集很有用,因此包的消费者可以在他们的 CMake 项目中轻松使用它。作为基于 CMake 的项目的包维护者,我们强烈建议您(坦率地说,我们期望您)提供这样的文件,因为这是其他人将您的库集成到他们的项目中的最有效方式。

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

find_package(SomePackage REQUIRED)

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

  • SomePackageConfig.cmake
  • somepackage-config.cmake

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

CMake 共同维护者 Craig Scott 在CppCon 2019 进行了深入介绍,提供了有关该主题的大量信息。

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

    • 太棒了。谢谢你。那么,只有当我们将项目转换为库时才使用它?如果我们从我们的项目中生成一个可执行文件,那么 .cmake 就不需要了吗?
    • 如果您希望您的库被其他库或使用 CMake 的应用程序使用,则需要它。
    猜你喜欢
    • 2013-08-01
    • 1970-01-01
    • 2016-08-27
    • 2020-09-27
    • 1970-01-01
    • 2022-10-05
    • 2019-04-06
    • 1970-01-01
    • 2015-06-12
    相关资源
    最近更新 更多