Spec-Zone.ru › CMake 3.29

CMP0156

Новое в версии 3.29.

Исключение дублирования библиотек в строках линковки на основе возможностей линковщика.

Традиционные линковщики поддерживают набор неопределенных символов во время линковки. Линковщик обрабатывает каждый файл в порядке их появления в командной строке, пока набор неопределенных символов не станет пустым. Объектный файл включается в выходной объект, когда он встречается, а его неопределенные символы добавляются в набор. При встрече архивного файла традиционный линковщик ищет объекты внутри него и обрабатывает те, которые удовлетворяют символы в наборе, которые еще не были решены.

Обработка взаимно зависимых архивов может быть затруднена при использовании традиционного линковщика. Архивные файлы могут потребоваться указывать несколько раз.

Некоторые линковщики (например, Apple или Windows линковщики, а также LLVM LLD) записывают все найденные символы в объектах и архивах по мере итерации по аргументам командной строки. Когда один из этих линковщиков встречает неопределенный символ, который может быть разрешен объектным файлом, содержащимся в ранее обработанном архивном файле, он немедленно извлекает и связывает его в выходной объект.

CMake 3.28 и ниже могут генерировать строки линковки, повторяющие статические библиотеки так, как потребовалось бы традиционному линковщику, даже при использовании линковщика, который этого не требует. Они также могут исключать дублирование динамических библиотек, сохраняя их последнее появление, что на платформах Windows может изменить порядок загрузки DLL.

CMake 3.29 и выше предпочитают применять различные стратегии в зависимости от возможностей линковщика. Таким образом, при нацеливании на платформы Apple и Windows все библиотеки исключают дублирование. Кроме того, на платформах Windows библиотеки исключают дублирование, сохраняя их первое появление, тем самым соблюдая порядок, указанный в проекте. Эта политика обеспечивает совместимость с проектами, которые не были обновлены, чтобы ожидать последнего поведения.

Поведение OLD для этой политики заключается в том, чтобы всегда повторять статические библиотеки, как если бы использовался традиционный линковщик, и всегда исключать дублирование динамических библиотек, сохраняя последнее появление каждой. Поведение NEW для этой политики заключается в применении различных стратегий в зависимости от возможностей линковщика.

Эта политика была введена в CMake версии 3.29. Она может быть установлена с помощью cmake_policy() или cmake_minimum_required(). Если она не установлена, CMake не выдает предупреждение и использует поведение OLD.

Примечание

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

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

Spec-Zone.ru

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