CMake find_path / find_library ищет <PackageName>_ ROOT по умолчанию? - PullRequest
0 голосов
/ 17 января 2020

После прочтения о политике CMake 74 - https://cmake.org/cmake/help/latest/policy/CMP0074.html

[...] теперь ищет префиксы, указанные в _ ROOT переменной CMake и ROOT переменная окружения. Корни пакетов поддерживаются в виде стека, поэтому вложенные вызовы для всех команд find * внутри модулей поиска и пакетов конфигурации также выполняют поиск корней в качестве префиксов.

Значит ли это, что <PackageName>_ROOT включать не нужно в find_* путях явно? Означает ли это, что <PackageName>_ROOT будет проверяться автоматически?

1 Ответ

1 голос
/ 17 января 2020

Да, но это относится только к CMake 3.12 и выше, как указано в политике Документация :

В CMake 3.12 и выше команда find_package(<PackageName>) теперь ищет префиксы определяется переменной <PackageName>_ROOT CMake и переменной окружения <PackageName>_ROOT.

Этот также применяется только к find_* командам в модулях поиска и пакетах конфигурации.

Это поведение явно указано в документации для всех команд find_*. Например, вот фрагмент из документации find_library() (важный раздел выделен жирным шрифтом):

Если NO_DEFAULT_PATH не указан, процесс поиска выглядит следующим образом:

  1. При вызове из модуля поиска или любого другого скрипта, загруженного при вызове find_package(<PackageName>), префиксы поиска уникальны для текущего найденного пакета. В частности, посмотрите переменную <PackageName>_ROOT CMake и переменную среды <PackageName>_ROOT. Переменные пакета root поддерживаются как стек, поэтому при вызове из вложенных модулей поиска или пакетов конфигурации root пути от родительского модуля поиска или пакета конфигурации будут искать после путей из текущего модуля или пакета. Другими словами, порядок поиска будет <CurrentPackage>_ROOT, ENV{<CurrentPackage>_ROOT}, <ParentPackage>_ROOT, ENV{<ParentPackage>_ROOT}, et c. Это можно пропустить, если передано NO_PACKAGE_ROOT_PATH или путем установки CMAKE_FIND_USE_PACKAGE_ROOT_PATH в FALSE.

Также обратите внимание, что переменная <PackageName>_ROOT будет , а не использоваться для поиска, если модуль поиска вызывается с NO_DEFAULT_PATH или NO_PACKAGE_ROOT_PATH.

...