gpt4 book ai didi

c++ - 未安装的包上的 CMake "find_package"命令意外成功

转载 作者:太空狗 更新时间:2023-10-29 21:10:23 26 4
gpt4 key购买 nike

我正在关注 chapter-02/recipe-06在“CMake Cookbook”中。此特定示例需要 Eigen C++ libraries .

我尝试构建该示例,但出现找不到 Eigen 的错误。

CMake Error at CMakeLists.txt:9 (find_package):
Could not find a package configuration file provided by "Eigen3" (requested
version 3.3) with any of the following names:

Eigen3Config.cmake
eigen3-config.cmake

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

这是预料之中的,因为我的系统上没有安装该库。

然后我下载了 Eigen 库的“.zip”文件并将其解压缩到我的项目之外的任意位置。我在 Eigen 目录中创建了一个“build”文件夹,并在“build”文件夹中运行 cmake ..(我只运行了 cmake - 我没有构建或安装包。)


在 Eigen 构建目录上运行 CMake 后,我返回到“recipe-06”的示例代码,它神奇地找到了 Eigen 库并成功构建,即使从未构建或安装 Eigen。

不知何故,只要在 Eigen 项目中运行 CMake,CMake 就会知道 Eigen 库的位置。执行此操作后,任何执行 find_package 以查找 Eigen3 的项目都会以某种方式获得定义的 ${Eigen3_DIR} 变量并能够找到它。


查看 find_package 的 CMake 文档,我没有看到任何关于其工作原理的解释。 Eigen 不在 find_package 搜索的任何典型位置。根据the documentation看起来不应该找到它。

更有趣的是 - 我将 Eigen 放在系统的哪个位置并不重要。我可以把它放在任何地方,它仍然会找到它。

根据我在文档中看到的所有内容,不应该找到它...但是找到了。那么问题是如何呢?为什么会这样?

附加信息:我使用的是 CMake 版本 3.13.3

最佳答案

XXXConfig.cmake 有两个“来源”文件,由 find_package() 内部使用打电话。

通常,XXXConfig.cmake文件是在安装项目时生成的,该文件包含有关已安装的库和 header 的信息。

但是 CMake 还提供了一个 export()命令,它允许导出构建树

export(PACKAGE <name>)

Store the current build directory in the CMake user package registry for package <name>. The find_package command may consider the directory while searching for package <name>.

Eigen 的 CMakeLists.txt使用 export()命令,因此可以使用 find_package 检测项目在运行 cmake 之后对于本征。

关于c++ - 未安装的包上的 CMake "find_package"命令意外成功,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54541261/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com