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