我一直试图找出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
会在那里搜索。某个地方一定有一些变量告诉它这样做,但是我不知道是哪个变量。我不希望搜索此路径。
答案 0 :(得分:0)
好吧,我认为答案是CMake遵循极其复杂的过程在整个地方搜索软件包。就我而言,它似乎在
下找到了一些东西~/.cmake/packages/<package>
然后必须将其定向到我所看到的奇怪前缀。删除此程序包注册表项可以解决此问题。在find_package
文档的结尾处描述了CMake遵循的完整搜索过程:https://cmake.org/cmake/help/v3.0/command/find_package.html