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