我下面的“chapter-02/recipe-06” CMake Cookbook。这个特殊的例子需要Eigen C++ libraries。
我试图建立的例子,并得到了本征未发现的错误。
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.
这是预料之中,因为图书馆是不是我的系统上安装。
然后我下载了本征库“.ZIP”文件,并将其解压到任意位置,我的项目之外。我在艾根目录下创建“构建”文件夹,在“创建”的文件夹跑cmake ..
。 (我只跑了cmake的 - 我没有建立或安装包)。
在本征build目录运行CMake的后,我又回到了示例代码为“配方-06”,这是奇迹般地能找到本征库,并成功打造,即使征未建或安装。
不知怎的,就在本征项目的CMake运行CMake的制作意识到征库的位置。这样做了以后,那做find_package
任何项目找到Eigen3某种方式得到定义的变量${Eigen3_DIR}
并能够找到它。
纵观CMake的文档find_package
我不明白为什么这个工程的任何解释。征是不是在任何find_package
搜索的典型位置。据the documentation它看起来像它应该不会被发现。
更有趣的 - 它并不重要,我把我的本征的系统上。我可以把它放在任何地方从字面上,它仍然会发现它。
据我看到的一切它不应该被发现的文件中...但它被发现。所以,问题是怎么样?为什么这项工作?
附加信息:我使用的CMake版本3.13.3
有2 XXXConfig.cmake
文件“起源”,由find_package()
调用内部使用。
通常情况下,在安装项目时产生XXXConfig.cmake
文件,该文件包含有关已安装的库和头文件信息。
但CMake的还提供了一个export()命令,它允许导出构建树。
export(PACKAGE <name>)
存放在包
<name>
CMake的用户包注册表当前版本目录。同时寻找包find_package
的<name>
命令可以考虑的目录。
本征的CMakeLists.txt
使用export()
命令,因此该项目只为征运行find_package
后变得与cmake
检测。