Существует ряд проблем с вашими CMakeLists.
Linking
Вы не связали свой исполняемый файл с Boost, поэтому, хотя у вас будет доступ к объявлениям функций Boost из заголовков, найденных в ${Boost_INCLUDEDIR}
, вы увидите неопределенные ссылки на их определения. Следовательно, вам необходимо:
target_link_libraries(logger PRIVATE ${Boost_LIBRARIES})
Это решит проблему с ссылками.
Определения компиляции
Менее проблематично, использование CMAKE_CXX_FLAGS
имеет некоторые проблемы. Использование set()
для CMAKE_CXX_FLAGS
устарело, но правильное использование:
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} <value>")
Потому что set () перезаписывает. Тем не менее, более современный способ сделать это будет:
target_compile_options(logger PRIVATE -g -Wall)
target_compile_definitions(logger PRIVATE BOOST_LOG_DYN_LINK=true)
Это будет гарантировать, что эти определения используются только для этого возможного. Обратите внимание, что для этого шага потребуется относительно свежая версия CMake.
Включить каталоги
Модуль findBoost экспортирует несколько переменных, одной из которых является ${Boost_INCLUDE_DIRS}
. Эта переменная представляет каталоги, в которых хранятся файлы повышения. Boost также ищет переменную ${BOOST_INCLUDEDIR}
, которая является путем к каталогу верхнего уровня заголовков повышения. В настоящее время вы используете последнее для представления первого, которое следует исправить.