CMake在一个陌生的位置搜索软件包

时间:2018-11-21 12:34:50

标签: cmake cmake-modules

我一直试图找出CMake find_package为什么在我的版本中找到错误的软件包。从CMake find_package: where did it find the 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会在那里搜索。某个地方一定有一些变量告诉它这样做,但是我不知道是哪个变量。我不希望搜索此路径。

1 个答案:

答案 0 :(得分:0)

好吧,我认为答案是CMake遵循极其复杂的过程在整个地方搜索软件包。就我而言,它似乎在

下找到了一些东西
~/.cmake/packages/<package>

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