Установка Boost под Qt
Сказ о том, как установить библиотеку Boost для Qt под MinGW и Qt под Visual Studio.
📖 Содержание ⬇️
Содержание
Материал подготовлен на примере Qt 15.0, Visual Studio 2019 16.5.4, Boost 1.73.0, Windows 10. Папка Boost после компиляции под MinGW x86-x64, Visual Studio x86-x64 у меня занимает 22.9 ГБ.
Подготовка
На сайте https://www.boost.org/ скачиваем последнюю версию библиотеки Boost:

Рисунок 1 — Главная страница библиотеки

Рисунок 2 — Архив последней версии библиотеки
Распакуем архив куда-нибудь и переименуем папку в boost. Я распаковал в корень диска C:\boost:

Рисунок 3 — Файлы из распаковываемого архива
Работаем с Qt
Собираем библиотеку Boost тем компилятором, которым компилируем наши проекты, где будем использовать Boost.
Под каждый компилятор вам нужно собирать библиотеку отдельно!
Для Qt под MinGW 32 бита нам потребуется программа gcc.exe.
У меня этот файл находится в папке:
D:\Qt\Tools\mingw730_32\bin
На время добавим этот путь в системную переменную Path на примере Windows 10:

Рисунок 4 — Переходим в настройки компьютера

Рисунок 5 — Выбор пункта «Дополнительные параметры системы»

Рисунок 6 — Выбора пункта «Переменные среды»

Рисунок 7 — Выбор системной переменной Path

Рисунок 8 — Добавление нового пути в переменной Path

Рисунок 9 — Соглашение с изменением через нажатие кнопки «OK»

Рисунок 10 — Соглашение с изменением через нажатие кнопки «OK»
Сборка для Qt под MinGW 32 бита
Вызываем командную строку. Это сделать можно разными способами. Например, жмем Win + R. Там вводим cmd и жмем Enter.
А можно через поиск:

Рисунок 11 — Вызов командной строки
Вводим команду для перехода в папку, где располагается распакованный Boost:
cd C:\boost

Рисунок 12 — Переход в папку с распакованным Boost
Вводим следующую команду. И ждем, когда всё выполнится:
bootstrap.bat gcc

Рисунок 13 — Результат выполнения команды bootstrap.bat gcc
Вы библиотеку Boost возможно будете собирать под разные версии компиляторов на одном компе. Поэтому в следующей команде укажите название папки, которая создаться в папке C:\boost, куда будут закинуты собранные файлы. Для MinGW 32bit папку назвал boost_mingw730_32.
Вводим команду (не забудьте поменять название папки на вашу версию компилятора). И ждем, когда всё выполнится (а вот это будет не быстро):
b2 toolset=gcc link=shared --prefix=boost_mingw730_32 install
И через долгое время (у меня ушло более 20 минут) библиотека соберется:

Рисунок 14 — Результат компилирования библиотеки
Кстати, эту команду можно ускорить, указав параметр -j8, где число будет обозначать на скольких ядрах процессора будет происходить компилирование (правда у меня не сильно скорость увеличилась):
b2 toolset=gcc link=shared -j8 --prefix=boost_mingw730_32 install
Итак, у нас у меня в папке C:\boost\boost_mingw730_32 собранная библиотека, которую я теперь могу использовать.
Не забудьте удалить путь к gcc.exe из переменной Path. Если вы не удалите, то ничего страшного не случится, но в будущем, когда под другой компилятор или другой версии текущего компилятора будете собирать Boost, возникнут проблемы.
И вам нужно удалить только один путь из переменной Path. Не вздумайте удалить всю переменную Path! Это приведет к очень плохим последствиям:

Рисунок 15 — Удаление пути к компилятору
Закрываем cmd.
Сборка для Qt под MinGW 64 бита
Для MinGW 64 бит повторяем всё тоже самое, но указываем другой путь к компилятору (у меня это D:\Qt\Tools\mingw730_64\bin) и указываем другую папку для сборки (например, boost_mingw730_64).
После указания пути к компилятору в переменной в Path в консоли последовательно вызываем команды:
cd C:\boost
bootstrap.bat gcc
b2 toolset=gcc link=shared --prefix=boost_mingw730_64 install

Рисунок 16 — Результат компилирования библиотеки
Не забудьте удалить путь к gcc.exe из переменной Path.
Сборка для Qt под Visual Studio 32 бит
И если сборка под MinGW прошла без проволочек, то со сборкой под Visual Studio я намучился.
У меня стоит сразу две версии Qt: под MinGW и под Visual Studio (QWebEngine работает только под Visual Studio).
Тут вместо gcc.exe будет нужен файл cl.exe. У меня стоит Visual Studio 2019, и данный файл находится в папке:
C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.25.28610\bin\Hostx86\x86\
Добавляем этот путь временно в системную переменную Path.
Также нам потребуется знание версии компилятора Visual Studio. Она не совпадает с названием установленной Visual Studio! Получить это значение можно из Visual Studio Installer:

Рисунок 17 — Visual Studio Installer
Через поиск msvc находим установленный компилятор:

Рисунок 18 — Найденный компонент
Нам потребуется как значение v142. Последовательно в cmd вызываем команды:
cd C:\boost
bootstrap.bat vc142
b2 toolset=msvc-14.2 --build-type=complete --prefix=boost_vs2019_32 install
Обратите внимание, что в командах используется значение v142 дважды в vc142 и msvc-14.2. И не забываем поменять название папки для собранной библиотеки Boost:

Рисунок 19 — Результат выполнения команды bootstrap.bat vc142

Рисунок 20 — Результат выполнения сборки
Сборка для Qt под Visual Studio 64 бита
Для MinGW повторяем всё тоже самое, но указываем другой путь к компилятору и указываем другую папку для сборки (например, boost_vs2019_64), а также указываем, что собираем именно под x64 (--address-model=64). У меня компилятор под x64 располагается тут:
C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.25.28610\bin\Hostx64\x64
После указания пути к компилятору в переменной в Path в консоли последовательно вызываем команды:
cd C:\boost
bootstrap.bat vc142
b2 toolset=msvc-14.2 --build-type=complete --address-model=64 --prefix=boost_vs2019_64 install

Рисунок 21 — Результат выполнения сборки
Подготовка Qt проекта
Создадим простой проект с виджетами с кнопкой PushButton и полем для вывода текста TextEdit. Для тех, кто не знает — скриншоты по под спойлером:
Создание проекта

Рисунок 22 — Создание нового проекта

Рисунок 23 — Выбор Qt Widgets Application

Рисунок 24 — Выбор имени проекта и его расположения

Рисунок 25 — Выбор системы сборки

Рисунок 26 — Выбор названия главного класса приложения

Рисунок 27 — Настройка перевода приложения

Рисунок 28 — Выбор компиляторов сборки

Рисунок 29 — Настройка системы контроля версий проекта

Рисунок 30 — Переход на форму приложения

Рисунок 31 — Размещение компонентов на форме

Рисунок 32 — Переход на обработчик клика кнопки

Рисунок 33 — Выбор типа события кнопки

Рисунок 34 — Метод обработки клика кнопки
Подготовка для работы с MinGW 32 бита
Идем в файл проекта .pro:

Рисунок 35 — Файл проекта
Там подключите Boost библиотеку (не забудьте поменять пути на свои). В коде ниже есть раздел как для MinGW, так и под Visual Studio, причем под две битности x86 и x64:
greaterThan(QT_MAJOR_VERSION, 4) {
TARGET_ARCH=$${QT_ARCH}
} else {
TARGET_ARCH=$${QMAKE_HOST.arch}
}
contains(TARGET_ARCH, x86_64) {
ARCHITECTURE = x64
} else {
ARCHITECTURE = x86
}
win32-g++:contains(ARCHITECTURE, x86): {
INCLUDEPATH += C:/boost/boost_mingw730_32/include/boost-1_73
}
win32-g++:contains(ARCHITECTURE, x64): {
INCLUDEPATH += C:/boost/boost_mingw730_64/include/boost-1_73
}
win32-msvc*:contains(ARCHITECTURE, x86) {
INCLUDEPATH += C:/boost/boost_vs2019_32/include/boost-1_73
}
win32-msvc*:contains(ARCHITECTURE, x64) {
INCLUDEPATH += C:/boost/boost_vs2019_64/include/boost-1_73
}

Рисунок 36 — Файл проекта с подключением Boost
Обратите внимание на то, в какую сторону повернуты слэши.
Пути к папкам поменяйте на свои:

Рисунок 37 — Пути к скомпилированным версиям Boost
В дальнейшем вам нужно будет добавлять тут еще библиотеки, которые вы будете использовать. Подключаете их через LIBS.
Если вы не подключите их, то будете видеть подобные ошибки (по ошибкам и определяете, какие файлы нужно подключить):

Рисунок 38 — Ошибка подключения файла библиотеки Boost
Для примеров ниже мне нужно было добавить библиотеки, и полный кусок добавляемого кода в *.pro файл выглядит так:
greaterThan(QT_MAJOR_VERSION, 4) {
TARGET_ARCH=$${QT_ARCH}
} else {
TARGET_ARCH=$${QMAKE_HOST.arch}
}
contains(TARGET_ARCH, x86_64) {
ARCHITECTURE = x64
} else {
ARCHITECTURE = x86
}
win32-g++:contains(ARCHITECTURE, x86): {
INCLUDEPATH += C:/boost/boost_mingw730_32/include/boost-1_73
LIBS += "-LC:/boost/boost_mingw730_32/lib" \
-llibboost_date_time-mgw7-mt-x32-1_73 \
-llibboost_system-mgw7-mt-x32-1_73
}
win32-g++:contains(ARCHITECTURE, x64): {
INCLUDEPATH += C:/boost/boost_mingw730_64/include/boost-1_73
LIBS += "-LC:/boost/boost_mingw730_64/lib" \
-llibboost_date_time-mgw7-mt-x64-1_73 \
-llibboost_system-mgw7-mt-x64-1_73
}
win32-msvc*:contains(ARCHITECTURE, x86) {
INCLUDEPATH += C:/boost/boost_vs2019_32/include/boost-1_73
LIBS += "-LC:/boost/boost_vs2019_32/lib" \
-llibboost_date_time-vc142-mt-x32-1_73 \
-llibboost_system-vc142-mt-x32-1_73
}
win32-msvc*:contains(ARCHITECTURE, x64) {
INCLUDEPATH += C:/boost/boost_vs2019_64/include/boost-1_73
LIBS += "-LC:/boost/boost_vs2019_64/lib" \
-llibboost_date_time-vc142-mt-x64-1_73 \
-llibboost_system-vc142-mt-x64-1_73
}

Рисунок 39 — Подключение библиотеки Boost
Обратите внимание, что перед путями и названием библиотеки появляется -L или -l:

Рисунок 40 — Пути к файлам Boost
Если вам нужно подключить несколько библиотек, то добавляете их подобным образом:
Обратите внимание на то, что для разных компиляторов одна и та же библиотека, например, libboost_date_time хранится в разных файлах, например с названием (без расширения) libboost_date_time-mgw7-mt-x32-1_73 и libboost_date_time-vc142-mt-x32-1_73.
Если после внесения изменений и сохранения файла у вас кнопка запуска проекта горит зеленым, то всё прошло хорошо. Если серым, то где-то напортачили:

Рисунок 41 — Кнопка запуска приложения
Перейдем в файл mainwindow.cpp:

Рисунок 42 — Файл mainwindow.cpp
Проверка № 1
Выведем седьмое простое число через функцию prime(). Функция является одной из специальных математических функций.
Подключаем заголовочный файл и соответствующее пространство имен:
#include <boost/math/special_functions/prime.hpp>
using namespace boost::math;
Теперь в коде клика кнопки можем прописать:
// Седьмое простое число
boost::uint32_t k = prime(7);
ui->textEdit->insertPlainText(QString::number(k) + "\n");

Рисунок 43 — Результат выполнения программы
Если возникнет такая ошибка, то повторно запустите процесс компиляции программы:

Рисунок 44 — Ошибка при компиляции программы
Проверка № 2
Проверим сколько дней прошло с 1 января.
Подключаем заголовочный файл и соответствующее пространство имен:
#include <boost/date_time/gregorian/gregorian.hpp>
using namespace boost::gregorian;
Теперь в коде клика кнопки можем прописать:
// Сколько дней прошло с 1 января
date today = day_clock::local_day();
partial_date new_years_day(1,Jan);
days days_since_year_start = today - new_years_day.get_date(today.year());
ui->textEdit->insertPlainText(QString::number(days_since_year_start.days()) + "\n");

Рисунок 45 — Результат выполнения программы
Полный код:
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <boost/math/special_functions/prime.hpp>
#include <boost/date_time/gregorian/gregorian.hpp>
using namespace boost::math;
using namespace boost::gregorian;
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::on_pushButton_clicked()
{
// Седьмое простое число
boost::uint32_t k = prime(7);
ui->textEdit->insertPlainText(QString::number(k) + "\n");
// Сколько дней прошло с 1 января
date today = day_clock::local_day();
partial_date new_years_day(1,Jan);
days days_since_year_start = today - new_years_day.get_date(today.year());
ui->textEdit->insertPlainText(QString::number(days_since_year_start.days()) + "\n");
}
Исходники проекта прикреплены к статье.