Приветствую! Составил небольшую заметку по настройке и статической линковке библиотеки 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 никогда не выполняется.
Скомпилируйте программу и запустите её передавая следующие комбинации:
- Boost_test.exe
- Boost_test.exe -c 5
- Boost_test.exe -h
- Boost_test.exe –help
Справка о доступных параметров будет выглядеть так: