Я следую chapter-02 / recipe-06 в " CMake Cookbook ".Для этого конкретного примера требуются библиотеки Eigen C ++ .
. Я попытался построить пример и получил ошибку, что Eigen не был найден.
CMake Error at CMakeLists.txt:9 (find_package):
Could not find a package configuration file provided by "Eigen3" (requested
version 3.3) with any of the following names:
Eigen3Config.cmake
eigen3-config.cmake
Add the installation prefix of "Eigen3" to CMAKE_PREFIX_PATH or set
"Eigen3_DIR" to a directory containing one of the above files. If "Eigen3"
provides a separate development package or SDK, be sure it has been
installed.
Это ожидалось, потому чтобиблиотека не была установлена в моей системе.
Затем я скачал файл ".zip" для библиотек Eigen и разархивировал его в произвольное место за пределами моего проекта.Я создал папку "build" в каталоге Eigen и запустил cmake ..
в папке "build". (Я только запускал cmake - я НЕ собирал и не устанавливал пакет.)
После запуска CMake в каталоге сборки Eigen я вернулся к примеру кода для "recipe"-06 "и он волшебным образом смог найти библиотеку Eigen и успешно ее построить, хотя Eigen никогда не собирался и не устанавливался.
Каким-то образом просто запуск CMake в проекте Eigen заставил CMake узнать о местонахождении библиотек Eigen.После этого любые проекты, которые делают find_package
для поиска Eigen3, каким-то образом определяют переменную ${Eigen3_DIR}
и могут ее найти.
Просматривая документацию CMake для find_package
Я неНе вижу объяснения, почему это работает.Эйгена нет ни в одном из типичных мест, которые find_package
ищет.В соответствии с документацией похоже, что она НЕ должна быть найдена.
Еще интереснее - не имеет значения, где я размещаю Eigen в моей системе.Я могу поместить его буквально в любом месте, и он все равно найдет его.
Согласно всему, что я вижу в документации, его не должно быть найдено ... но оно найдено.Итак, вопрос в том, как?Почему это работает?
Дополнительная информация: Я использую CMake версии 3.13.3