Таргетированная линковка (привязка библиотеки к цели)
Привязка библиотеки как составной части какой-то цели, выстраивается зависимость только этой цели от этой библиотеки
В чем-то похоже на наследование в языке 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 – его расширение (доп. использование)
Крайне важно выстраивать зависимости тогда будет более оптимальная линковка “вышестоящих” библиотек, включающих изменяемые файлы (а не всех)