Стратегия LINK_LIBRARIES_STRATEGY
Добавлена в версии 3.31.
Укажите стратегию упорядочения прямых зависимостей целевого объекта от библиотек в командной строке компоновщика. Это свойство инициализируется значением переменной CMAKE_LINK_LIBRARIES_STRATEGY, если она установлена при создании целевого объекта.
CMake генерирует строку компоновки целевого объекта, используя его Свойства компоновки целевого объекта. В частности, свойство целевого объекта LINK_LIBRARIES записывает прямые зависимости целевого объекта от библиотек, как правило, заполняемые вызовами target_link_libraries(). Косвенные зависимости от компоновки наследуются из тех записей свойства LINK_LIBRARIES, которые называют целевые библиотеки, следуя транзитивному замыканию их свойств INTERFACE_LINK_LIBRARIES. CMake поддерживает несколько стратегий для номинального упорядочения прямых и косвенных зависимостей от компоновки, которые затем фильтруются для Поведения, специфичного для инструментальной цепочки.
Рассмотрим этот пример для стратегий ниже:
add_library(A STATIC ...) add_library(B STATIC ...) add_library(C STATIC ...) add_executable(main ...) target_link_libraries(B PRIVATE A) target_link_libraries(C PRIVATE A) target_link_libraries(main PRIVATE A B C)
Поддерживаемые стратегии:
-
REORDER_MINIMALLY -
Записи свойства
LINK_LIBRARIESвсегда появляются первыми и в своем исходном порядке. Косвенные зависимости от компоновки, не удовлетворённые исходными записями, могут быть переупорядочены и дублированы относительно друг друга, но всегда добавляются после исходных записей. Это может привести к менее эффективным строкам компоновки, но предоставляет проектам контроль над порядком независимых записей. Такой контроль может быть важен при смешивании флагов компоновки с библиотеками или когда несколько библиотек предоставляют заданный символ.Это значение по умолчанию.
В приведённом выше примере эта стратегия вычисляет строку компоновки для
main, начиная с её исходных записейA B C, а затем добавляет ещёA, чтобы удовлетворить зависимостиBиCотA. Номинальный порядок, полученный по этой стратегии, равенA B C A.Обратите внимание, что дополнительная фильтрация для Поведения, специфичного для инструментальной цепочки, может исключить дубликаты
Aв фактическом вызове компоновщика в сгенерированной системе сборки, что приведёт кA B CилиB C A. -
REORDER_FREELY -
Записи свойства
LINK_LIBRARIESмогут быть переупорядочены, дубликаты удалены и перемешаны с косвенными зависимостями от компоновки. Это может привести к более эффективным строкам компоновки, но не предоставляет проектам никакого контроля над порядком независимых записей.В приведённом выше примере эта стратегия вычисляет строку компоновки для
main, переупорядочив исходные записиA B Cдля удовлетворения зависимостейBиCотA. Номинальный порядок, полученный по этой стратегии, равенB C A.
Поведение, специфичное для инструментальной цепочки
После того, как одна из вышеперечисленных стратегий сгенерирует номинальный порядок прямых и косвенных зависимостей от компоновки, фактический вызов компоновщика в сгенерированной системе сборки может исключить дубликаты записей на основе требований, специфичных для платформы, и возможностей компоновщика. См. политику CMP0156.
Например, если стратегия REORDER_MINIMALLY генерирует A B C A, фактическая строка компоновки может исключить дубликаты A следующим образом:
- Если
Aявляется статической библиотекой и компоновщик автоматически повторно сканирует, то сохраняется первое вхождение, что приводит кA B C. См. политикуCMP0179 - Если
Aявляется динамической библиотекой в Windows, сохраняется первое вхождение, что приводит кA B C. - Если
Aявляется динамической библиотекой в macOS или на платформах UNIX, сохраняется последнее вхождение, что приводит кB C A.
© 2000–2024 Kitware, Inc. and Contributors
Licensed under the BSD 3-clause License.
https://cmake.org/cmake/help/v3.31/prop_tgt/LINK_LIBRARIES_STRATEGY.html