08. Привязка библиотеки к цели — target_link_libraries

Таргетированная линковка (привязка библиотеки к цели)

Привязка библиотеки как составной части какой-то цели, выстраивается зависимость только этой цели от этой библиотеки
В чем-то похоже на наследование в языке C++ только вместо классов пересобираются библиотеки и модификаторы доступа тоже в чем-то похожи.

target_link_libraries(lib_or_app PRIVATE/PUBLIC/INTERFACE libs_or_crc)

App<-libA<-libB

PRIVATE – библиотека является составной частью этого кода и выше не видна (libB видна в libA и нигде более)
PUBLIC – библиотека видна везде т.е. содержится в хедерах и .cpp файлах (libB видна в libA и выше)
INTERFACE – содержит хедеры из более низких библиотек, но не использует их в .cpp файлах
(libA имеет хедеры из libB, но не имеет реализации в .cpp файлах) обычно libB содержит какой-то интерфейс а libA – его расширение (доп. использование)

Крайне важно выстраивать зависимости тогда будет более оптимальная линковка “вышестоящих” библиотек, включающих изменяемые файлы (а не всех)

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *