Re: Boost и CMake
От: пффф  
Дата: 06.07.24 15:00
Оценка:
Здравствуйте, пффф, Вы писали:

В общем, после ковыряния родилось несколько вариантов.

1) Девелоперский буст (boost-dev в терминах линуксовых пакетных менеджеров) можно скачать так:
git clone --single-branch --branch master --recurse-submodules -j8 https://github.com/boostorg/boost.git


2) Девелоперский буст содержит CMakeLists.txt и вроде как заточен под CMake, но CMake официально пока не поддерживается.

3) Релизный архив буста имеет другую структуру и там нет CMakeLists.txt и прочего симейкнутого, он собирается классически через bootstrap и bjam/b2


Итак, мои варианты:

Вариант первый, простой, для использования хидер-онли библиотек.
Качаем официальный архив, например, https://archives.boost.io/release/1.85.0/source/boost_1_85_0.zip.
Распаковываем, например, в D:\boost
Делаем переменную окружения BOOST_ROOT=D:\boost
В своём CMakeLists.txt делаем так:
if(NOT Boost_INCLUDE_DIR)
    if(DEFINED ENV{BOOST_ROOT})
        set(Boost_INCLUDE_DIR "$ENV{BOOST_ROOT}")
    endif()
endif()
find_package(Boost)
include_directories(${Boost_INCLUDE_DIRS})



Вариант второй, жирный.
Boost выкачивается и конфигурируется каждый раз при перегенерации сборочных скриптов, и в каждом конфиге занимает полтора гига и минут пять времени (на шустрой машине может наверное и за пару минут управится).
Таким образом, если я хочу собирать MSVC x86/x64 и MinGW x86/x64 — это занимает 20 минут времени и 6 гигов места на проект на диске.
Зато в этом варианте вроде как можно любые бустовые либы использовать, но мне пока не надо.
В своём CMakeLists.txt делаем так:
include(FetchContent)
FetchContent_Declare(
  Boost
  URL https://github.com/boostorg/boost/releases/download/boost-1.84.0/boost-1.84.0.tar.xz
  URL_MD5 893b5203b862eb9bbd08553e24ff146a
  DOWNLOAD_EXTRACT_TIMESTAMP ON
)
FetchContent_MakeAvailable(Boost)


По FetchContent_Declare.
Рецепт брал тут — https://github.com/boostorg/cmake?tab=readme-ov-file#using-boost-with-fetchcontent
Тут буст предпоследний.
URL_MD5 — не обязательно, и можно записать по-другому, как "URL_HASH MD5:893b5203b862eb9bbd08553e24ff146a"
Можно через WGET (или как удобнее) скачать архив, и положить локально, и подсовывать путь вместо URL. Хз сколько времени экономит, этот XZ всего 90 метров, но похоже, там есть всё что надо, и можно жить без сети.

У меня так работает
FetchContent_Declare(
  Boost
  URL D:/boost-1.84.0.tar.xz
  DOWNLOAD_EXTRACT_TIMESTAMP ON
)


В этом варианте вроде как можно юзать любую бустовую либу, но я не проверял.
Моя проверка была минимальной, соберётся или нет:
#include <boost/container/static_vector.hpp>



Третий вариант: собрать девелоперский вариант буста с симейком, сделать install и типа всё будет шоколадно. У меня не получилось, в итоге накопал первые два.

Комментарии, предложения, замечания — приветствуются.

Все обратные тихонечко проходят мимо, не расплёскивая своё говно
Отредактировано 06.07.2024 15:06 пффф . Предыдущая версия . Еще …
Отредактировано 06.07.2024 15:04 пффф . Предыдущая версия .
Отредактировано 06.07.2024 15:03 пффф . Предыдущая версия .
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.