0

我一直在试图追查为什么 CMakefind_package在我的构建中找到了错误的包。从CMake find_package:它在哪里找到包?我学会了如何让它告诉我它正在搜索的路径,以及它在哪里找到了包。但是现在我需要弄清楚为什么CMake 正在搜索某个路径,因为它出于某种原因在非默认位置进行搜索。我检查了变量

CMAKE_MODULE_PATH
CMAKE_PREFIX_PATH
CMAKE_INCLUDE_PATH
CMAKE_LIBRARY_PATH
CMAKE_PROGRAM_PATH

但它们是空的。变量

CMAKE_SYSTEM_PREFIX_PATH

是非空的,但它包含的只是

/usr/local;/usr;/;/usr;/tmp/pip-req-build-ckl98h8g/build/lib.linux-x86_64-3.6

所以这不是原因。

还有什么可以让 CMake 搜索一些奇怪的前缀?

确切的问题如下:find_package(yaml-cpp)正在搜索如下:

  ...
  Checking prefix [/]
  Checking file [/yaml-cppConfig.cmake]
  Checking file [/yaml-cpp-config.cmake]
  Checking prefix [/usr/games/]
  Checking file [/usr/games/yaml-cppConfig.cmake]
  Checking file [/usr/games/yaml-cpp-config.cmake]
  Checking prefix [/usr/local/games/]
  Checking file [/usr/local/games/yaml-cppConfig.cmake]
  Checking file [/usr/local/games/yaml-cpp-config.cmake]
  Checking prefix [/snap/]
  Checking file [/snap/yaml-cppConfig.cmake]
  Checking file [/snap/yaml-cpp-config.cmake]
  Checking prefix [/home/farmer/repos/gambit/copy3/build/contrib/yaml-cpp-0.6.2/]
  Checking file [/home/farmer/repos/gambit/copy3/build/contrib/yaml-cpp-0.6.2/yaml-cppConfig.cmake]
  Checking file [/home/farmer/repos/gambit/copy3/build/contrib/yaml-cpp-0.6.2/yaml-cpp-config.cmake]

它在最后一个路径中找到包配置文件。但那是一些其他代码的私有构建目录,所以我不知道为什么find_package要在那里搜索。一定是某个地方的某个变量告诉它这样做,但我不知道是哪一个。我不希望搜索此路径。

4

1 回答 1

0

好的,我认为答案是 CMake 遵循一个非常复杂的程序来到处搜索包。就我而言,它似乎在下面找到了一些东西

~/.cmake/packages/<package>

然后它必须将它指向我看到的奇怪前缀。删除此包注册表项可解决此问题。CMake 遵循的完整搜索过程在文档末尾进行了find_package描述:https ://cmake.org/cmake/help/v3.0/command/find_package.html

于 2018-11-21T12:48:59.647 回答