Spec-Zone.ru › CMake

CMP0128

Добавлено в версии 3.22.

Если для этой политики задано значение NEW:

  • <LANG>_EXTENSIONS инициализируется значением CMAKE_<LANG>_EXTENSIONS, если оно задано; в противном случае используется значение по умолчанию CMAKE_<LANG>_EXTENSIONS_DEFAULT.
  • Расширения корректно включаются или отключаются, если <LANG>_STANDARD не задано или удовлетворяется значением по умолчанию.
  • Флаги, влияющие на режим стандарта, не добавляются, если они не нужны для достижения заданного режима.

Поведение OLD:

  • Инициализирует <LANG>_EXTENSIONS значением CMAKE_<LANG>_EXTENSIONS, если оно задано; в противном случае используется значение по умолчанию ON.
  • Всегда добавляет флаг, если задано <LANG>_STANDARD и <LANG>_STANDARD_REQUIRED имеет значение OFF.
  • Если <LANG>_STANDARD не задано:

    • Не отключает расширения, даже если <LANG>_EXTENSIONS имеет значение OFF.
    • Не включает расширения, если <LANG>_EXTENSIONS имеет значение ON, за исключением компилятора IAR.

В следующих случаях код может потребоваться обновить для поведения NEW:

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

    Такой код следует изменить одним из следующих способов:

    • Вместо добавления флагов вручную использовать <LANG>_STANDARD и <LANG>_EXTENSIONS.
    • Или обеспечить использование флагов, заданных вручную, при обнаружении компилятора.
  • Если расширения отключались без задания <LANG>_STANDARD, ранее CMake фактически не отключал их.

    Такой код следует изменить, чтобы не отключать расширения, если они необходимы.

  • Если расширения включались или отключались, когда <LANG>_STANDARD удовлетворялось компилятором по умолчанию, ранее CMake фактически не включал и не отключал расширения.

    Такой код следует изменить, чтобы задать правильный режим расширений.

Если при обнаружении компилятора используются флаги, влияющие на режим стандарта (например, в a toolchain file с помощью CMAKE_<LANG>_FLAGS_INIT), то они повлияют на обнаруженные значения по умолчанию для standard и extensions.

Эта политика была добавлена в CMake версии 3.22. Её можно задать с помощью cmake_policy() или cmake_minimum_required(). Если она не задана, CMake по умолчанию не выдаёт предупреждение и использует поведение OLD.

См. документацию переменной CMAKE_POLICY_WARNING_CMP0128, управляющей предупреждением.

Примечание

Поведение OLD для политики по определению считается устаревшим и может быть удалено в будущей версии CMake.

© 2000–2026 Kitware, Inc. and Contributors
Licensed under the BSD 3-clause License.
https://cmake.org/cmake/help/latest/policy/CMP0128.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API