Работа с Boost и CMake под Windows

Приветствую! Составил небольшую заметку по настройке и статической линковке библиотеки Boost с помощью CMake под Windows. Boost представляет собой набор библиотек на языке C++ с широким функционалом и является в некотором роде полигоном для апробирования некоторых идей, которые затем попадают в новые стандарты языка С++. Для установки и настройки CMake проекта прошу под кат!

Установка Boost

1. Скачивание и подготовка библиотеки

Скачайте библиотеку по адресу https://www.boost.org/users/download/ и распакуйте архив, например, в директорию C:/Boost. Затем перейдите в директорию и запустите файл bootstrap.bat, дождитесь окончания его работы. После этого запустите b2.exe и дождитесь окончания его работы. b2.exe осуществляет компиляцию исходного кода библиотек и у меня этот процесс занял более получаса. Точнее сказать не могу, так как оставил его работать и лёг спать, утром всё было готово.

2. Настройка CMake

Для подключения библиотеки Boost к вашему проекту добавьте следующие строки в CMakeLists.txt.

set (BOOST_ROOT "C:/boost_1_78_0/") # Путь к библиотеке Boost

set (CMAKE_CXX_STANDARD 20) 
set (Boost_NO_SYSTEM_PATHS ON)
set (Boost_USE_MULTITHREADED ON)
set (Boost_USE_STATIC_LIBS ON)
set (Boost_USE_STATIC_RUNTIME OFF)
set (BOOST_ALL_DYN_LINK OFF)
 
# Подключаем необходимые модули. Для примера подключим program_options
find_package (Boost REQUIRED COMPONENTS program_options REQUIRED) 
 
# Если библиотека найдена, то
if (Boost_FOUND)
    include_directories (SYSTEM ${Boost_INCLUDE_DIR}) # подключаем заголовочные файлы
    add_executable (Boost_test "main.cpp") # Создаем исполняемый файл для нашего проекта
    target_link_libraries (Boost_test ${Boost_LIBRARIES}) # подключаем библиотеку
endif ()

Обратите внимание на строку 16 – мы создаем исполняемый файл нашего проекта только в том случае, если библиотека найдена. Это условие не обязательно, но если вы работаете, например, в Visual Studio, то в случае отсутствия библиотеки, студия не будет отображать доступную к запуску цель, но и ошибки при компиляции не выдаст тоже. Использовать ли это условие или нет – выбор за вами.

Boost в действии

Давайте теперь для примера добавим в проект файл main.cpp со следующим кодом, взятым из примера работы с компонентом program_options библиотеки Boost:

#include <iostream>
#include <boost/program_options.hpp>

using namespace std;
namespace po = boost::program_options;

int main(int argc, char* argv[])
{
    po::options_description desc("Allowed options");
    int c;
    desc.add_options()
        ("help,h", "produce help message")
        ("compression,c", po::value<int>()->default_value(3), "set compression level")
        ;

    po::variables_map vm;
    po::store(po::parse_command_line(argc, argv, desc), vm);
    po::notify(vm);

    if (vm.count("help")) {
        cout << desc << "\n";
        return 1;
    }

    if (vm.count("compression")) {
        cout << "Compression level was set to "
            << vm["compression"].as<int>() << ".\n";
    }
    else {
        cout << "Compression level was not set.\n";
    }
	return 0;
}

Program_options является обработчиком параметров командной строки и предоставляет удобный интерфейс для работы. В рассмотренном фрагменте создается экземпляр объекта program_options desc и устанавливается заголовок для отображения справки. Справка будет вызываться параметром –help или -h. Далее регистрируются доступные параметры, с указанием через запятую полной и укороченной версии и описания команды. Укороченная версия параметров не является обязательной и может быть опущена. Для параметра compression устанавливается значение по умолчанию = 3. Далее идёт обработка введённых параметров.

П.с. из-за установленного значения по умолчанию код в строке 30 никогда не выполняется.

Скомпилируйте программу и запустите её передавая следующие комбинации:

  1. Boost_test.exe
  2. Boost_test.exe -c 5
  3. Boost_test.exe -h
  4. Boost_test.exe –help

Справка о доступных параметров будет выглядеть так: