Использование Boost.asio с cmake?

Вопрос: Я хочу статический link boost.asio для моего небольшого проекта без внешних библиотек (имея только один файл exe/bin в результате для его распространения). Boost.asio требует Boost.system, и я начинаю тонуть, пытаясь понять, как скомпилировать все это. Как использовать Boost.asio с cmake? Лучший ответ: Если я понимаю фактический вопрос, он в корне задает вопрос о том,

Вопрос:

Я хочу статический link boost.asio для моего небольшого проекта без внешних библиотек (имея только один файл exe/bin в результате для его распространения). Boost.asio требует Boost.system, и я начинаю тонуть, пытаясь понять, как скомпилировать все это. Как использовать Boost.asio с cmake?

Лучший ответ:

Если я понимаю фактический вопрос, он в корне задает вопрос о том, как статически ссылаться на сторонние библиотеки в CMake.

В моей среде я установил Boost для /opt/boost.

Самый простой способ – использовать FindBoost.cmake в установке CMake:

set(BOOST_ROOT /opt/boost) set(Boost_USE_STATIC_LIBS ON) find_package(Boost COMPONENTS system) include_directories(${Boost_INCLUDE_DIR}) add_executable(example example.cpp) target_link_libraries(example ${Boost_LIBRARIES})

Вариант, который находит все библиотеки Boost и явно связывается с системной библиотекой:

set(BOOST_ROOT /opt/boost) set(Boost_USE_STATIC_LIBS ON) find_package(Boost REQUIRED) include_directories(${Boost_INCLUDE_DIR}) add_executable(example example.cpp) target_link_libraries(example ${Boost_SYSTEM_LIBRARY})

Если у вас нет надлежащей установки Boost, есть два подхода к статической привязке к библиотекам. Первый подход создает импортированную цель CMake:

add_library(boost_system STATIC IMPORTED) set_property(TARGET boost_system PROPERTY IMPORTED_LOCATION /opt/boost/lib/libboost_system.a ) include_directories(/opt/boost/include) add_executable(example example.cpp) target_link_libraries(example boost_system)

И альтернатива заключается в том, чтобы явно перечислить библиотеку в target_link_libraries а не в целевой:

include_directories(/opt/boost/include) add_executable(example example.cpp) target_link_libraries(example /opt/boost/lib/libboost_system.a)

Оцените статью
Добавить комментарий