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.25.1 не предупреждает, когда политика не задана, а просто использует поведение 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.25/policy/CMP0128.html