cmake-policies(7)
- Введение
- Политики, введённые в CMake 3.31
- Политики, введённые в CMake 3.30
- Политики, введённые в CMake 3.29
- Политики, введённые в CMake 3.28
- Политики, введённые в CMake 3.27
- Политики, введённые в CMake 3.26
- Политики, введённые в CMake 3.25
- Политики, введённые в CMake 3.24
- Политики, введённые в CMake 3.23
- Политики, введённые в CMake 3.22
- Политики, введённые в CMake 3.21
- Политики, введённые в CMake 3.20
- Политики, введённые в CMake 3.19
- Политики, введённые в CMake 3.18
- Политики, введённые в CMake 3.17
- Политики, введённые в CMake 3.16
- Политики, введённые в CMake 3.15
- Политики, введённые в CMake 3.14
- Политики, введённые в CMake 3.13
- Политики, введённые в CMake 3.12
- Политики, введённые в CMake 3.11
- Политики, введённые в CMake 3.10
- Политики, введённые в CMake 3.9
- Политики, введённые в CMake 3.8
- Политики, введённые в CMake 3.7
- Политики, введённые в CMake 3.4
- Политики, введённые в CMake 3.3
- Политики, введённые в CMake 3.2
- Политики, введённые в CMake 3.1
- Политики, введённые в CMake 3.0
- Политики, введённые в CMake 2.8
- Политики, введённые в CMake 2.6
Введение
Политики в CMake используются для сохранения обратной совместимости между различными версиями. При введении новой политики более новые версии CMake начинают предупреждать об обратной совместимости. Можно отключить предупреждение, явно запросив старое, или обратную совместимость, используя команду cmake_policy(). Также можно запросить NEW, или не обратную совместимость для политики, также избегая предупреждения. Каждая политика также может быть установлена в NEW или OLD поведение явно в командной строке с переменной CMAKE_POLICY_DEFAULT_CMP<NNNN>.
Политика — это механизм устаревания, а не надёжный переключатель функций. Политику почти никогда не следует устанавливать в OLD, за исключением случаев, когда необходимо заглушить предупреждения в полностью замороженном или стабильном коде, или временно в рамках более масштабного пути миграции. OLD поведение каждой политики нежелательно и будет заменено условием ошибки в будущей версии.
Команда cmake_minimum_required() делает больше, чем просто сообщает об ошибке, если для построения проекта используется слишком старая версия CMake. Она также устанавливает все политики, введённые в данной версии CMake или ранее, в NEW поведение. Для управления политиками без увеличения минимально требуемой версии CMake можно использовать команду if(POLICY):
if(POLICY CMP0990) cmake_policy(SET CMP0990 NEW) endif()
Это позволяет использовать NEW поведение с более новыми версиями CMake, которые могут использовать пользователи, не вызывая предупреждения о совместимости.
В некоторых случаях установка политики ограничена и не распространяется на родительский контекст. Например, если файлы, прочитанные командой include() или командой find_package(), содержат использование cmake_policy(), то эта установка политики по умолчанию не повлияет на вызывающую сторону. Обе команды принимают необязательное ключевое слово NO_POLICY_SCOPE для управления этим поведением.
Переменная CMAKE_MINIMUM_REQUIRED_VERSION также может использоваться для определения, следует ли сообщать об ошибке при использовании устаревших макросов или функций.
Политики, введённые в CMake 3.31
- CMP0180: project() всегда устанавливает <PROJECT-NAME>_* как обычные переменные.
- CMP0179: Дедупликация статических библиотек в строках линковки сохраняет первое вхождение.
- CMP0178: Командные строки команды Test сохраняют пустые аргументы.
- CMP0177: Пути DESTINATION в install() нормализуются.
- CMP0176: ENCODING в execute_process() по умолчанию является UTF-8.
- CMP0175: add_custom_command() отклоняет недопустимые аргументы.
- CMP0174: cmake_parse_arguments(PARSE_ARGV) определяет переменную для пустой строки после однозначного ключевого слова.
- CMP0173: Модуль CMakeFindFrameworks удалён.
- CMP0172: Модуль CPack по умолчанию включает установку на основе машины в генераторе CPack WIX.
- CMP0171: 'codegen' — это зарезервированное имя целевого объекта.
Политики, введённые в CMake 3.30
- CMP0170: Требования FETCHCONTENT_FULLY_DISCONNECTED применяются.
- CMP0169: FetchContent_Populate(depName) с одним аргументом устарел.
- CMP0168: FetchContent реализует шаги напрямую, а не через подпостроение.
- CMP0167: Модуль FindBoost удалён.
- CMP0166: TARGET_PROPERTY оценивает свойства линковки транзитивно по частным зависимостям статических библиотек.
- CMP0165: enable_language() не должен вызываться до project().
- CMP0164: add_library() отклоняет SHARED библиотеки, если они не поддерживаются платформой.
- CMP0163: Свойство GENERATED файла исходного кода теперь видно во всех директориях.
- CMP0162: Генераторы Visual Studio по умолчанию добавляют UseDebugLibraries.
Политики, введённые в CMake 3.29
- CMP0161: CPACK_PRODUCTBUILD_DOMAINS по умолчанию — true.
- CMP0160: Больше свойств только для чтения теперь вызывают ошибку при попытке их установки.
- CMP0159: file(STRINGS) с REGEX обновляет CMAKE_MATCH_<n>.
- CMP0158: add_test() учитывает CMAKE_CROSSCOMPILING_EMULATOR только при кросс-компиляции.
- CMP0157: Режим компиляции Swift выбирается с помощью абстракции.
- CMP0156: Дедупликация библиотек в строках линковки основана на возможностях линковщика.
Политики, введённые в CMake 3.28
- CMP0155: Исходные файлы C++ в целях с C++20 и более поздними версиями сканируются на предмет импорта, если это поддерживается.
- CMP0154: Сгенерированные файлы по умолчанию являются приватными в целях, использующих наборы файлов.
- CMP0153: Команда exec_program не должна вызываться.
- CMP0152: file(REAL_PATH) разрешает символические ссылки перед схлопыванием компонентов ../.
Политики, введённые CMake 3.27
- CMP0151: Директория включения AUTOMOC по умолчанию является системной директорией включения.
- CMP0150: ExternalProject_Add и FetchContent_Declare обрабатывают относительные пути к репозиториям Git как относительные к удалённому репозиторию родительского проекта.
- CMP0149: Генераторы Visual Studio по умолчанию выбирают последнюю версию Windows SDK.
- CMP0148: Модули FindPythonInterp и FindPythonLibs удалены.
- CMP0147: Генераторы Visual Studio компилируют пользовательские команды параллельно.
- CMP0146: Модуль FindCUDA удалён.
- CMP0145: Модули Dart и FindDart удалены.
- CMP0144: find_package использует переменные с заглавными буквами PACKAGENAME_ROOT.
Политики, введённые CMake 3.26
Политики, введённые CMake 3.25
- CMP0142: Генератор Xcode не добавляет постфикс для каждой конфигурации к путям поиска библиотек.
- CMP0141: Флаги формата отладки информации MSVC выбираются с помощью абстракции.
- CMP0140: Команда return() проверяет свои аргументы.
Политики, введённые CMake 3.24
- CMP0139: Команда if() поддерживает сравнения путей с помощью оператора PATH_EQUAL.
- CMP0138: CheckIPOSupported использует флаги из вызываемого проекта.
- CMP0137: try_compile() передает переменные платформы в режиме проекта.
- CMP0136: Флаги библиотеки времени выполнения Watcom выбираются с помощью абстракции.
- CMP0135: ExternalProject и FetchContent по умолчанию игнорируют отметки времени в архивах для метода загрузки по URL.
- CMP0134: Возврат к представлению реестра Windows "HOST" при недоступности представления "TARGET".
- CMP0133: Модуль CPack по умолчанию отключает SLA в генераторе CPack DragNDrop.
- CMP0132: Не устанавливайте переменные среды компилятора при первом запуске.
- CMP0131: LINK_LIBRARIES поддерживает выражение генератора LINK_ONLY.
- CMP0130: while() диагностирует ошибки вычисления условия.
Политики, введённые CMake 3.23
Политики, введённые CMake 3.22
- CMP0128: Улучшено определение языка стандарта и флагов расширений.
- CMP0127: cmake_dependent_option() поддерживает полную синтаксическую конструкцию условия.
Политики, введённые CMake 3.21
- CMP0126: set(CACHE) не удаляет обычную переменную с тем же именем.
- CMP0125: find_(path|file|library|program) имеют согласованное поведение для переменных кэша.
- CMP0124: Переменные цикла foreach() доступны только в области цикла.
- CMP0123: Флаги компиляции и линковки ARMClang cpu/arch должны быть установлены явно.
- CMP0122: UseSWIG использует стандартные соглашения об именах библиотек для языка csharp.
- CMP0121: Команда list обнаруживает недействительные индексы.
Политики, введённые CMake 3.20
- CMP0120: Модуль WriteCompilerDetectionHeader удалён.
- CMP0119: Свойство LANGUAGE файла исходного кода явно компилируется как язык.
- CMP0118: Сгенерированные исходные файлы могут использоваться в разных директориях без ручного маркирования.
- CMP0117: Флаг MSVC RTTI /GR не добавляется в CMAKE_CXX_FLAGS по умолчанию.
- CMP0116: Генераторы Ninja преобразуют DEPFILE из add_custom_command().
- CMP0115: Расширения файлов исходного кода должны быть явными.
Политики, введённые CMake 3.19
- CMP0114: Цели шагов ExternalProject полностью принимают свои шаги.
- CMP0113: Генераторы Makefile не повторяют пользовательские команды из зависимостей целевых объектов.
- CMP0112: Выражения генераторов компонентов файлов целевых объектов не добавляют зависимости целевых объектов.
- CMP0111: Импортируемый целевой объект, у которого отсутствует свойство расположения, завершает работу во время генерации.
- CMP0110: add_test() поддерживает произвольные символы в именах тестов.
- CMP0109: find_program() требует разрешения на выполнение, но не на чтение.
Политики, введённые CMake 3.18
- CMP0108: Целевой объект не может ссылаться на себя через псевдоним.
- CMP0107: Целевой объект ALIAS не может перезаписывать другой целевой объект.
- CMP0106: Модуль Documentation удален.
- CMP0105: Шаг линковки устройства использует опции линковки.
- CMP0104: CMAKE_CUDA_ARCHITECTURES теперь определяется для NVCC, пустой CUDA_ARCHITECTURES не допускается.
- CMP0103: Не допускается несколько вызовов export() с тем же FILE без APPEND.
Политики, введённые CMake 3.17
- CMP0102: mark_as_advanced() ничего не делает, если запись кэша не существует.
- CMP0101: target_compile_options учитывает ключевое слово BEFORE во всех областях.
- CMP0100: Позволить AUTOMOC и AUTOUIC обрабатывать файлы заголовков .hh.
- CMP0099: Свойства линковки передаются по наследству через приватные зависимости статических библиотек.
- CMP0098: FindFLEX выполняет flex в CMAKE_CURRENT_BINARY_DIR при выполнении.
Политики, введённые CMake 3.16
- CMP0097: ExternalProject_Add с GIT_SUBMODULES "" не инициализирует подмодули.
- CMP0096: project() сохраняет ведущие нули в компонентах версии.
- CMP0095: Элементы RPATH правильно экранируются в скрипте промежуточной установки CMake.
Политики, введённые CMake 3.15
- CMP0094: FindPython3, FindPython2 и FindPython используют LOCATION для стратегии поиска.
- CMP0093: FindBoost сообщает Boost_VERSION в формате x.y.z.
- CMP0092: Флаги предупреждений MSVC по умолчанию не входят в CMAKE_{C,CXX}_FLAGS.
- CMP0091: Флаги библиотеки времени выполнения MSVC выбираются с помощью абстракции.
- CMP0090: export(PACKAGE) по умолчанию не заполняет реестр пакетов.
- CMP0089: Идентификатор компилятора для компиляторов IBM Clang XL теперь XLClang.
Политики, введённые CMake 3.14
- CMP0088: FindBISON выполняет bison в CMAKE_CURRENT_BINARY_DIR при выполнении.
- CMP0087: install(SCRIPT | CODE) поддерживает генераторские выражения.
- CMP0086: UseSWIG учитывает SWIG_MODULE_NAME через флаг -module.
- CMP0085: Генераторское выражение IN_LIST обрабатывает пустые элементы списка.
- CMP0084: Модуль FindQt не существует для find_package().
- CMP0083: Добавление опций PIE при компоновке исполняемого файла.
- CMP0082: Правила установки из add_subdirectory() чередуются с правилами в вызывающей функции.
Политики, введённые CMake 3.13
- CMP0081: Относительные пути запрещены в свойстве цели LINK_DIRECTORIES.
- CMP0080: BundleUtilities не может быть включён во время конфигурации.
- CMP0079: target_link_libraries допускает использование с целями в других каталогах.
- CMP0078: UseSWIG генерирует стандартные имена целей.
- CMP0077: option() учитывает обычные переменные.
- CMP0076: Команда target_sources() преобразует относительные пути в абсолютные.
Политики, введённые CMake 3.12
- CMP0075: Макросы проверки файлов include учитывают CMAKE_REQUIRED_LIBRARIES.
- CMP0074: find_package использует переменные PackageName_ROOT.
- CMP0073: Не генерировать устаревшие кеши _LIB_DEPENDS.
Политики, введённые CMake 3.11
Политики, введённые CMake 3.10
- CMP0071: Позволить AUTOMOC и AUTOUIC обрабатывать сгенерированные файлы GENERATED.
- CMP0070: Определение поведения file(GENERATE) для относительных путей.
Политики, введённые CMake 3.9
- CMP0069: INTERPROCEDURAL_OPTIMIZATION применяется при включении.
- CMP0068: Настройки RPATH на macOS не влияют на install_name.
Политики, введённые CMake 3.8
Политики, введённые CMake 3.7
Политики, введённые CMake 3.4
- CMP0065: Не добавлять флаги для экспорта символов из исполняемых файлов без свойства цели ENABLE_EXPORTS.
- CMP0064: Поддержка нового оператора TEST if().
Политики, введённые CMake 3.3
- CMP0063: Учёт свойств видимости для всех типов целей.
- CMP0062: Запрещение install() результата export().
- CMP0061: CTest по умолчанию не сообщает make игнорировать ошибки (-i).
- CMP0060: Компоновка библиотек по полному пути, даже в неявных каталогах.
- CMP0059: Не обрабатывать DEFINITIONS как встроенное свойство каталога.
- CMP0058: Ninja требует явных побочных продуктов пользовательских команд.
- CMP0057: Поддержка нового оператора IN_LIST if().
Политики, введённые CMake 3.2
- CMP0056: Учёт флагов компоновки в try_compile() сигнатуре файла исходного кода.
- CMP0055: Строгий контроль для команды break().
Политики, введённые CMake 3.1
- CMP0054: Только интерпретировать аргументы if() как переменные или ключевые слова, если они не заключены в кавычки.
- CMP0053: Упрощение обработки ссылок на переменные и последовательностей escape.
- CMP0052: Отклонение каталогов исходных и сборки в установленных INTERFACE_INCLUDE_DIRECTORIES.
- CMP0051: Перечисление TARGET_OBJECTS в свойстве SOURCES цели.
Политики, введённые CMake 3.0
- CMP0050: Запрещение add_custom_command сигнатур SOURCE.
- CMP0049: Не расширять переменные в записях исходного кода цели.
- CMP0048: Команда project() управляет переменными VERSION.
- CMP0047: Использование QCC идентификатора компилятора для драйверов qcc на QNX.
- CMP0046: Ошибка при отсутствующей зависимости в add_dependencies.
- CMP0045: Ошибка при отсутствующей цели в get_target_property.
- CMP0044: Операторы генераторских выражений Lang_COMPILER_ID чувствительны к регистру.
- CMP0043: Игнорировать свойства COMPILE_DEFINITIONS_Config.
- CMP0042: MACOSX_RPATH включён по умолчанию.
- CMP0041: Ошибка при относительном include с выражением генератора.
- CMP0040: Цель в сигнатуре TARGET команды add_custom_command должна существовать.
- CMP0039: Цели-утилиты не могут иметь зависимости компоновки.
- CMP0038: Цели не могут напрямую ссылаться на себя в компоновке.
- CMP0037: Имена целей не должны быть зарезервированы и должны соответствовать шаблону валидации.
- CMP0036: Команда build_name не должна вызываться.
- CMP0035: Команда variable_requires не должна вызываться.
- CMP0034: Команда utility_source не должна вызываться.
- CMP0033: Команда export_library_dependencies не должна вызываться.
- CMP0032: Команда output_required_files не должна вызываться.
- CMP0031: Команда load_command не должна вызываться.
- CMP0030: Команда use_mangled_mesa не должна вызываться.
- CMP0029: Команда subdir_depends не должна вызываться.
- CMP0028: Двойные двоеточия в имени цели означают ALIAS или IMPORTED цель.
- CMP0027: Условные ссылки на импортированные цели с отсутствующими каталогами заголовков.
- CMP0026: Запрещено использование свойства LOCATION цели.
- CMP0025: Идентификатор компилятора для Apple Clang теперь AppleClang.
- CMP0024: Запрещено включение результата export().
Политики, введённые CMake 2.8
- CMP0023: Подписи target_link_libraries с простыми и ключевыми ссылками не могут быть смешаны.
- CMP0022: INTERFACE_LINK_LIBRARIES определяет интерфейс связывания.
- CMP0021: Критическая ошибка при использовании относительных путей в свойстве INCLUDE_DIRECTORIES целевого объекта.
- CMP0020: Автоматическое связывание исполняемых файлов Qt с целевым объектом qtmain в Windows.
- CMP0019: Не повторно расширять переменные в информации о включении и связывании.
- CMP0018: Игнорирование переменной CMAKE_SHARED_LIBRARY_Lang_FLAGS.
- CMP0017: Предпочтение файлов из каталога модуля CMake при включении из него.
- CMP0016: target_link_libraries() сообщает об ошибке, если единственным аргументом является не целевой объект.
- CMP0015: link_directories() обрабатывает пути относительно каталога исходных файлов.
- CMP0014: Каталоги входных данных должны содержать CMakeLists.txt.
- CMP0013: Не допускаются дублирующие каталоги библиотек.
- CMP0012: if() распознаёт числа и булевы константы.
Политики, введённые в CMake 2.6
- CMP0011: Включённые скрипты выполняют автоматическое cmake_policy PUSH и POP.
- CMP0010: Неправильный синтаксис ссылки на переменную является ошибкой.
- CMP0009: Вызовы FILE GLOB_RECURSE по умолчанию не должны следовать за символическими ссылками.
- CMP0008: Библиотеки, связанные полным путём, должны иметь имя файла библиотеки.
- CMP0007: Команда list больше не игнорирует пустые элементы.
- CMP0006: Установка целевых объектов MACOSX_BUNDLE требует назначения BUNDLE DESTINATION.
- CMP0005: Значения определений препроцессора теперь автоматически экранируются.
- CMP0004: Связанные библиотеки не должны содержать начальных или конечных пробелов.
- CMP0003: Библиотеки, связанные через полный путь, больше не генерируют пути поиска компоновщика.
- CMP0002: Логические имена целевых объектов должны быть глобально уникальными.
- CMP0001: CMAKE_BACKWARDS_COMPATIBILITY больше не должен использоваться.
- CMP0000: Необходимо указать минимальную требуемую версию CMake.
© 2000–2024 Kitware, Inc. and Contributors
Licensed under the BSD 3-clause License.
https://cmake.org/cmake/help/v3.31/manual/cmake-policies.7.html