gpt4 book ai didi

cmake - CMake include() 与 find_package() 的默认搜索路径

转载 作者:行者123 更新时间:2023-12-04 01:25:41 24 4
gpt4 key购买 nike

我在我的 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()include 共享相同的搜索路径,特别是 CMAKE_MODULE_PATH。显然这是不正确的。

注意

SET(CMAKE_MODULE_PATH "/usr/lib/cmake/vtk-6.3")
include(vtkModuleAPI)

确实有效。

另请注意,我使用的是 CMake 3.5,因此不再有 FindVTK.cmake as it used to be .

find_package()include() 的默认搜索路径是什么?为什么找不到 vtkModuleAPI.cmake

最佳答案

find_package两种模式, 它们有很多不同之处:

  1. 模块模式 尝试定位FindXXX.cmake 文件。该文件在 CMAKE_MODULE_PATH 中列出的目录下以及安装 CMake 的目录下搜索。

  2. 配置模式 尝试定位XXXConfig.cmake 文件。该文件在 CMAKE_PREFIX_PATH 和一些其他系统特定变量中列出的目录下搜索。 (完整算法见文档,链接在文章开头)。

命令 include仅在 CMAKE_MODULE_PATH 和特殊 CMake 模块目录下的目录下搜索模块。

如您所见,模块模式 中的命令include 和命令find_package 使用相似的搜索路径。但在您的情况下,VTKConfig.cmake 只能在 find_packageconfig 模式 中搜索,它使用完全不同的搜索算法.


对于 VTK,CMake 已经提供了 FindVTK.cmake 文件,当您调用 find_package(VTK) 时会用到它。但在内部,此脚本使用 find_package(VTK QUIET NO_MODULE)

如果这个调用定位到文件/usr/lib/cmake/vtk-6.3/VTKConfig.cmake,它会执行这个脚本,脚本包括vtkModuleAPI.cmake一个.

如果您的 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。

关于cmake - CMake include() 与 find_package() 的默认搜索路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42027646/

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