Spec-Zone.ru › CMake 3.31

Стратегия 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

Spec-Zone.ru

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