我在 Debian 机器上安装了 VTK6,它将所有 CMake 文件放置在
$ ls /usr/lib/cmake/vtk-6.3/
[...]
VTKConfig.cmake
vtkModuleAPI.cmake
[...]
当我做
find_package(VTK)
在另一个项目中,一切都很顺利。然而,
include(vtkModuleAPI)
产生错误
include could not find load file:
vtkModuleAPI
我一直有这样的印象find_package()
and include
共享相同的搜索路径,特别是CMAKE_MODULE_PATH
。显然这是不正确的。
注意
SET(CMAKE_MODULE_PATH "/usr/lib/cmake/vtk-6.3")
include(vtkModuleAPI)
确实有效。
另请注意,我使用的是 CMake 3.5,因此不再有FindVTK.cmake
往常 https://cmake.org/cmake/help/v3.5/module/FindVTK.html.
默认搜索路径是什么find_package()
and include()
?为什么是vtkModuleAPI.cmake
未找到?
有两种模式 of 查找包 https://cmake.org/cmake/help/v3.7/command/find_package.html,它们有很多区别:
模块模式试图找到FindXXX.cmake
文件。该文件在列出的目录下搜索CMAKE_MODULE_PATH在 CMake 安装目录下加上。
配置模式试图找到XXXConfig.cmake
文件。该文件在列出的目录下搜索CMAKE_PREFIX_PATH以及其他一些系统特定的变量。 (完整算法请参阅文档,链接在帖子开头)。
Command include https://cmake.org/cmake/help/v3.7/command/include.html仅在以下目录下搜索模块CMAKE_MODULE_PATH和特殊的 CMake 模块目录。
如你所见,命令include
和命令find_package
in 模块模式使用类似的搜索路径。但就你而言,VTKConfig.cmake
只能在以下位置搜索配置模式 of find_package
,它使用完全不同的搜索算法.
对于 VTK,CMake 已发货FindVTK.cmake
文件,调用时使用find_package(VTK)
。但在内部,这个脚本使用find_package(VTK QUIET NO_MODULE)
.
如果此调用找到文件/usr/lib/cmake/vtk-6.3/VTKConfig.cmake
,它执行这个脚本,该脚本包括vtkModuleAPI.cmake
one.
If your VTKConfig.cmake
CMake 没有找到它,你可以通过设置来帮助它VTK_DIR变量为/usr/lib/cmake/vtk-6.3/
.
[从 CMake-3.1 开始,FindVTK.cmake
不再随 CMake 一起提供,因此find_package(VTK)
立即尝试定位VTKConfig.cmake
].
无论如何,目录中的模块/usr/lib/cmake/vtk-6.3/
不应该直接包含在内: 这个目录是private对于VTK。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)