Вступить в клуб →
средняявопросСборка, тесты и профилирование

PUBLIC и PRIVATE в target_link_libraries

Библиотека собирается так:

add_library(core src/core.cpp)
target_link_libraries(core PRIVATE Boost::system)
target_include_directories(core PUBLIC include)

Заголовок include/core.h, который подключают потребители, содержит #include <boost/asio.hpp> и поле типа boost::asio::io_context. Сборка самой core проходит, а приложение, линкующее core, падает с ошибкой «не найден boost/asio.hpp». Почему?

  • Boost::asio — заголовочная библиотека, такие зависимости нельзя указывать в `target_link_libraries` ни с каким ключом видимости, их подключают только через `target_include_directories`
  • Не хватает `target_include_directories(core PRIVATE include)` — публичные пути не действуют внутри самой цели
  • Порядок команд: `target_link_libraries` должна идти после `target_include_directories`, иначе свойства не применяются
  • Зависимость помечена `PRIVATE`, поэтому её include-пути не передаются потребителям; раз тип виден в публичном заголовке, связь должна быть `PUBLIC`

🔒 Проверка ответа — для участников клуба

  • Проверка ответа
  • Подсказка, если застряли
  • Разбор с объяснением, почему так
  • Прогресс по всем задачам и виртуальные собеседования
Зарегистрироваться →

Регистрация занимает минуту

Другие задачи раздела