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`
