CMake, boost и библиотеки
От: small_cat Россия  
Дата: 21.09.23 10:03
Оценка:
Здравствуйте.

Перешел на CMake (встала задача кросс-платформенности), переношу проекты с использованием boost. gcc-8, Ubuntu 18.04.
boost 1.78, собран с --layout=versioned.

Путь к boost прописан в системной BOOST_DIR, т.к. в ближайшем будущем понадобятся библиотеки с nanoseconds разрешением, библиотеки собраны в отдельную папку и указаны явно через BOOST_LIBRARYDIR.

Минимальный CMakeLists.txt:

cmake_minimum_required(VERSION 3.8.0)
project(hello VERSION 0.1.0 LANGUAGES C CXX)

set(BOOST_ROOT $ENV{BOOST_DIR})
set(BOOST_LIBRARYDIR "${BOOST_ROOT}/lib-gcc8/lib")

set(Boost_USE_STATIC_LIBS ON) 
set(Boost_USE_MULTITHREADED ON)  
set(Boost_USE_STATIC_RUNTIME OFF) 
# set(Boost_DEBUG ON)

set(Boost_ARCHITECTURE -x64) # без указания архитектуры не работает автопоиск

find_package(Boost REQUIRED COMPONENTS system filesystem)

include(CTest)
enable_testing()

add_executable(hello main.cpp)

set(CPACK_PROJECT_NAME ${PROJECT_NAME})
set(CPACK_PROJECT_VERSION ${PROJECT_VERSION})
include(CPack)

target_include_directories(hello PUBLIC ${Boost_INCLUDE_DIRS})
target_link_libraries(hello  ${Boost_LIBRARIES} dl)    # без dl не линкуется при использовании boost::dll


Вопросы:
1) как всё таки корректно определять структуру имен при поиске библиотек boost через CMake?
2) как корректно задать CMake, если boost собран с --layout=tagged?
3) почему не линкуется без явного указания dl? В доках нигде необходимость оного не видел, обнаружил путем случайного гугления

Спасибо!
- Простите, профессор, не пса, а когда он уже был человеком.
— То-есть он говорил? Это еще не значит быть человеком. (с) Булгаков
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.