CMP0157
Добавлено в версии 3.29.
Режим компиляции Swift выбирается с помощью абстракции.
Компилятор Swift может компилировать модули в разных режимах. Выбор режима сборки зависит от того, вносит ли разработчик изменения итеративно или собирает выпуск для распространения и хочет применить дополнительные оптимизации к результирующему двоичному файлу.
В версиях CMake с 3.26 по 3.28 двоичные файлы Swift собираются с включённой оптимизацией всего модуля, если задан тип сборки, отличный от отладочного. В версиях CMake старше 3.26 разработчику необходимо вручную указать нужный флаг для генераторов Ninja, а указать оптимизацию всего модуля для генератора Xcode невозможно.
В версиях CMake 3.29 и выше предпочтительно задавать режим компиляции с помощью свойства цели Swift_COMPILATION_MODE, которое можно инициализировать переменной CMAKE_Swift_COMPILATION_MODE.
Эта политика обеспечивает совместимость с проектами, которые ещё не были обновлены. Настройка политики вступает в силу начиная с первой команды project() или enable_language(), включающей язык Swift.
Примечание
После того как политика вступила в силу в корне проекта, выбранный вариант необходимо использовать во всём дереве. Если проект содержит вложенные проекты в подкаталогах, обязательно преобразуйте их все одновременно.
Поведение OLD для этой политики собирает все цели Swift в режиме wholemodule для конфигураций, отличных от отладочных. Генераторы Ninja добавляют флаг -wmo в начало стандартного набора флагов Swift. Генератор Xcode задаёт атрибут SWIFT_COMPILATION_MODE равным wholemodule в создаваемом файле проекта Xcode.
Поведение NEW для этой политики применяет режим компиляции, указанный в свойстве цели Swift_COMPILATION_MODE, которое инициализируется для каждой создаваемой цели переменной CMAKE_Swift_COMPILATION_MODE.
Эта политика была введена в CMake версии 3.29. Её можно установить с помощью 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/CMP0157.html