Как работает поиск пакетов CMake?

Я работал над Qub3d, который использует libCinder в качестве отладчика, и продолжал получать эту странную ошибку о невозможности найти один из готовые файлы cmake.

CMake Error at dependencies/cinder/proj/cmake/modules/cinderMakeApp.cmake:65 (find_package):
  Could not find a package configuration file provided by "cinder" with any
  of the following names:

    cinderConfig.cmake
    cinder-config.cmake

  Add the installation prefix of "cinder" to CMAKE_PREFIX_PATH or set
  "cinder_DIR" to a directory containing one of the above files.  If "cinder"
  provides a separate development package or SDK, be sure it has been
  installed.

Итак, я осмотрелся и нашел это решение, которое сводится к запуску cmake .. в (cinder_dir)/build, что каким-то образом позволило сценарию сборки Cmake моего проекта найти пакет cinder.

Ищет ли find_package() файлы, которые создает cmake ..?

Если бы кто-нибудь мог сказать мне, почему это работает, я был бы очень признателен.


person TMcSquared    schedule 28.02.2018    source источник
comment
Если вам нужно вручную собрать пакет cinder, он неправильно интегрирован в Qub3d. Если бы мне пришлось угадывать, что проект использует макрос externalproject_add(). Как правило, см. здесь, здесь или более конкретно CMake Запуск find_package после построения зависимостей   -  person Florian    schedule 01.03.2018
comment
на самом деле нет, он использует готовый макрос от Cinder под названием ci_make_app   -  person TMcSquared    schedule 01.03.2018


Ответы (1)


Превратить мой комментарий в ответ

Если вам нужно вручную собрать пакет cinder, он неправильно интегрирован в Qub3d или, поскольку Qub3d использует предложенный cinder способ интеграции, ошибка в поддержке CMake библиотеки cinder.

Глядя на код ci_make_app() вы имели в виду, вызов find_package() будет работать, только если cinder уже собран (генерирует необходимые cinderConfig.cmake ).

Как это работает?

См. документацию find_package() для получения подробной информации об "алгоритме поиска". ". В случае cinder аргумент PATH просто указывает, где найти файл cinderConfig.cmake.

Вы можете увидеть, что делает CMake find_package(), используя cmake -D CMAKE_FIND_DEBUG_MODE=ON ..

Ссылки

person Florian    schedule 03.03.2018
comment
Вот что сделал человек по ссылке, которую я дал, чтобы исправить свою проблему: Apologies, this works just fine! I missed the argument in one of the cmake commands. So you run “cmake -G"Visual Studio 14 2015 Win64” …" from CINDER_PATH/build and then again from your project proj/cmake/build folder. If errors you may need to delete the contents of the build folder if something was there previous. - person TMcSquared; 03.03.2018