【问题标题】:how does find_package work in CONFIG modefind_package 如何在 CONFIG 模式下工作
【发布时间】:2015-07-30 20:52:01
【问题描述】:

我在CONFIG模式下使用find_package来查找Qt5:

find_package(Qt5 CONFIG REQUIRED COMPONENTS Core)

我没有指定 CMAKE_PREFIX_PATH 并且 /home/user/Qt/5.5/gcc_64/bin 未在 PATH 中设置,但 cmake 找到 *Config.cmake 文件:

/home/user/Qt/5.5/gcc_64/lib/cmake/Qt5/Qt5Config.cmake
/home/user/Qt/5.5/gcc_64/lib/cmake/Qt5Core/Qt5CoreConfig.cmake

它是如何工作的? cmake 如何创建搜索路径?

编辑1

我阅读了一份文档,但我不清楚:

<prefix>/(lib/<arch>|lib|share)/cmake/<name>*/          (U)
<prefix>/(lib/<arch>|lib|share)/<name>*/                (U)
<prefix>/(lib/<arch>|lib|share)/<name>*/(cmake|CMake)/  (U)

什么是前缀?上述模式如何与 Qt 路径匹配? :

/home/user/Qt/5.5/gcc_64/lib/cmake/Qt5/Qt5Config.cmake

我为我的库创建了一个类似的路径:

/home/user/Mylib/1.0/gcc_64/lib/cmake/Mylib1/Mylib1Config.cmake

find_package(Mylib1 CONFIG) 返回错误:

CMake Warning at CMakeLists.txt:14 (find_package):
Could not find a package configuration file provided by "Mylib1" with any
of the following names:

Mylib1Config.cmake
mylib1-config.cmake

Add the installation prefix of "Mylib1" to CMAKE_PREFIX_PATH or set
"Mylib1_DIR" to a directory containing one of the above files.  If "Mylib1"
provides a separate development package or SDK, be sure it has been
installed.

【问题讨论】:

标签: cmake


【解决方案1】:

&lt;prefix&gt;/home/user/Qt/5.5/gcc_64,可以通过该模板获取Qt5Config.cmake的完整目录名:

&lt;prefix&gt;/(lib/&lt;arch&gt;|**lib**|share)/cmake/&lt;name&gt;*/

至于前缀本身的来源,我猜它来自User Package Registry

  1. 存储在 CMake 用户包注册表中的搜索路径。如果通过了 NO_CMAKE_PACKAGE_REGISTRY,则可以跳过此步骤。有关用户包注册表的详细信息,请参阅 cmake-packages(7) 手册。

您可以检查~/.cmake/packages/ 文件夹的内容以检查该注册表的内容。

【讨论】:

  • 我没有任何 .cmake 目录。为什么cmake找不到上面提到的Mylib1?
  • Why cmake can't find Mylib1 mentioned above ? - 因为 CMake 不知道前缀 /home/user/**Mylib**/1.0/gcc_64/。你可以尝试对/home/user/QT/5.5/1.0/gcc_64/lib/cmake/Mylib1/Mylib1Config.cmake 做同样的事情
  • 所以 cmake 安装了一些前缀列表,对吧?
  • 可能是。很可能,/home/user/QT/5.5/1.0/gcc_64 前缀以某种方式随 QT 安装一起提供。
  • 问题是问&lt;prefix&gt; 的值来自哪里,但是这个答案没有回答。
【解决方案2】:

例如,如果/home/user/Qt/5.5/gcc_64/bin 在您的PATH 中,cmake 将自动搜索同级 lib 目录。

【讨论】:

    猜你喜欢
    • 2014-12-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-14
    • 2018-05-02
    相关资源
    最近更新 更多