CMP0168
Добавлено в версии 3.30.
Модуль FetchContent реализует действия напрямую, а не через отдельную под-сборку.
В CMake 3.29 и более ранних версиях FetchContent реализуется как отдельная под-сборка. Для этого требовалось конфигурировать отдельный проект и использовать инструмент сборки. Такой подход может быть очень медленным с некоторыми генераторами и операционными системами. В CMake 3.30 и более поздних версиях предпочтительно напрямую выполнять загрузку, обновление и применение исправлений в рамках основного проекта.
Поведение NEW имеет следующие особенности:
- Под-сборка не используется. Все операции выполняются непосредственно на этапе конфигурирования CMake основного проекта. При запуске в режиме скрипта CMake наличие инструмента сборки не требуется.
- Генераторные выражения и переменные GNU Make вида
$(SOMEVAR)не поддерживаются. Их не следует использовать ни в одном аргументе командFetchContent_Declare()илиFetchContent_Populate(). - Все параметры
LOG_...иUSES_TERMINAL_..., параметрQUIETи переменнаяFETCHCONTENT_QUIETигнорируются. ВыводFetchContentвсегда включается в вывод конфигурирования основного проекта. Это также означает, что теперь учитывается уровень ведения журнала сообщений (см.CMAKE_MESSAGE_LOG_LEVELи--log-level). Уровень журнала сообщений по умолчанию должен быть сопоставим с использованиемQUIETпри настройке политикиOLD, за исключением того, что теперь будут выводиться предупреждения. - Параметры
PREFIX,TMP_DIR,STAMP_DIR,LOG_DIRиDOWNLOAD_DIRи соответствующие им свойства каталогов игнорируются. МодульFetchContentуправляет этими расположениями самостоятельно. -
cmake --freshудалит файлы меток и скриптов, используемые для отслеживания и получения зависимости. Это приведёт к повторному выполнению этапов загрузки, обновления и применения исправлений для зависимости. Каталог, используемый для загрузок, не затрагивается параметромcmake --fresh, поэтому ранее загруженные файлы для метода загрузкиURLможно использовать повторно.
Поведение OLD имеет следующие особенности:
- Для выполнения этапов загрузки, обновления и применения исправлений всегда используется под-сборка. Инструмент сборки должен быть доступен, даже если команда
FetchContent_Populate()используется в режиме скрипта CMake. - Можно использовать генераторные выражения и переменные GNU Make вида
$(SOMEVAR), хотя такое использование почти всегда неуместно. Они вычисляются в под-сборке, поэтому им недоступна какая-либо информация из основной сборки. - Поддерживаются все параметры ведения журнала, управления терминалом и каталогами, связанные с этапами загрузки, обновления или применения исправлений.
- Если используется параметр
QUIETили переменнойFETCHCONTENT_QUIETприсвоено значение true, предупреждения не будут отображаться в выводе. -
Параметр
cmake --freshне влияет на файлы меток или скриптов зависимости. Ранее выполненные этапы будут запущены повторно, только если изменились сведения о зависимости.
С большой вероятностью пользователи могут задать переменной CMAKE_POLICY_DEFAULT_CMP0168 значение NEW, чтобы глобально переключиться на поведение NEW, пока проект и его зависимости не будут обновлены для использования настройки политики NEW по умолчанию. Проекты обычно не используют возможности, которые больше не поддерживаются в поведении NEW, и даже такие проекты часто продолжают нормально работать, когда эти параметры игнорируются. Перед глобальной установкой этого поведения проверьте, не используют ли вызовы FetchContent_Declare() или FetchContent_Populate() игнорируемые параметры таким образом, который изменит наблюдаемое поведение, кроме случаев, когда временные или созданные внутренними средствами файлы размещаются в других каталогах.
Эта политика введена в CMake версии 3.30. Её можно задать с помощью cmake_policy() или cmake_minimum_required(). Если она не задана, CMake не выводит предупреждение и использует поведение OLD.
Примечание
Поведение OLD политики по определению устарело и может быть удалено в будущей версии CMake.
© 2000–2026 Kitware, Inc. and Contributors
Licensed under the BSD 3-clause License.
https://cmake.org/cmake/help/latest/policy/CMP0168.html