Spec-Zone.ru › CMake 3.31

CMP0156

Добавлена в версии 3.29.

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

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

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

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

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

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

Примечание

Когда эта политика установлена в значение NEW, политика CMP0179 управляет тем, какая запись статических библиотек сохраняется при их устранении от дублирования.

Поведение 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.31/policy/CMP0156.html

Spec-Zone.ru

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