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