Spec-Zone.ru › CMake

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/latest/policy/CMP0156.html

Spec-Zone.ru

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