Spec-Zone.ru › CMake

СТРАТЕГИЯ_СВЯЗАННЫХ_БИБЛИОТЕК

Добавлен в версии 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/latest/prop_tgt/LINK_LIBRARIES_STRATEGY.html

Spec-Zone.ru

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