Spec-Zone.ru › CMake 3.24

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.24.2 не выводит предупреждение, когда параметр не установлен, и просто использует поведение по умолчанию OLD. Используйте команду cmake_policy(), чтобы явно установить его в OLD или NEW. См. документацию переменной CMAKE_POLICY_WARNING_CMP0128 для управления предупреждением.

Примечание

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

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

Spec-Zone.ru

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