CMake ищет пакеты в странном месте

Я пытался отследить, почему CMake find_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 будет искать там. Некоторая переменная где-то, должно быть, сказала это сделать, но я не знаю, какая именно. Я не хочу, чтобы этот путь был найден.

1 ответ

Хорошо, я думаю, что ответ заключается в том, что CMake следует ужасно сложной процедуре, чтобы искать повсюду пакеты. В моем случае кажется, что он нашел что-то под

~/.cmake/packages/<package>

который тогда, должно быть, направил его на странный префикс, который я видел. Удаление этой записи реестра пакета устранило проблему. Полная процедура поиска, которой следует CMake, описана в конце find_package документация: https://cmake.org/cmake/help/v3.0/command/find_package.html

Другие вопросы по тегам