CMake ищет пакеты в странном месте - PullRequest
0 голосов
/ 21 ноября 2018

Я пытался отследить, почему 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 Ответ

0 голосов
/ 21 ноября 2018

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

~/.cmake/packages/<package>

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

...