4.5 KiB
4.5 KiB
Основные сценарии использования библиотеки program_options
Начало работы
В этом разделе мы рассмотрим простейший пример использования библиотеки. Предполагается, что действует следующий алиас пространства имён:
namespace po = boost::program_options;
Пример базового использования
Простейший пример, обрабатывающий два параметра:
// Объявление поддерживаемых параметров
po::options_description desc("Допустимые параметры");
desc.add_options()
("help", "показать справочную информацию")
("compression", po::value<int>(), "установить уровень сжатия");
po::variables_map vm;
po::store(po::parse_command_line(ac, av, desc), vm);
po::notify(vm);
if (vm.count("help")) {
cout << desc << "\n";
return 1;
}
if (vm.count("compression")) {
cout << "Уровень сжатия установлен на "
<< vm["compression"].as<int>() << ".\n";
} else {
cout << "Уровень сжатия не установлен.\n";
}
Детали работы с параметрами
Типы и свойства параметров
Рассмотрим более сложный пример на основе компилятора:
int opt;
po::options_description desc("Допустимые параметры");
desc.add_options()
("help", "показать справочную информацию")
("optimization", po::value<int>(&opt)->default_value(10), "уровень оптимизации")
("include-path,I", po::value<vector<string>>(), "путь включения")
("input-file", po::value<vector<string>>(), "входной файл");
Особенности этого примера:
- Параметр
optimizationимеет значение по умолчанию 10 - Параметр
include-pathподдерживает короткое имя-I - Векторные типы позволяют указывать параметр несколько раз
Позиционные параметры
po::positional_options_description p;
p.add("input-file", -1);
po::variables_map vm;
po::store(po::command_line_parser(ac, av)
.options(desc).positional(p).run(), vm);
po::notify(vm);
Использование нескольких источников
Группировка параметров
// Общие параметры командной строки
po::options_description generic("Общие параметры");
generic.add_options()
("version,v", "показать версию")
("help", "показать справку");
// Параметры конфигурации
po::options_description config("Конфигурация");
config.add_options()
("optimization", po::value<int>(&opt)->default_value(10), "уровень оптимизации")
("include-path,I", po::value<vector<string>>()->composing(), "путь включения");
// Скрытые параметры
po::options_description hidden("Скрытые параметры");
hidden.add_options()
("input-file", po::value<vector<string>>(), "входной файл");
Пример использования:
$ bin/gcc/debug/multiple_sources
Пути включения: /opt
Уровень оптимизации: 1
$ bin/gcc/debug/multiple_sources --help
Допустимые параметры:
Общие параметры:
-v [ --версия ] : показать версию
--help : показать справку
Конфигурация:
--оптимизация n : уровень оптимизации
-I [ --путь-включения ] путь : путь включения
$ bin/gcc/debug/multiple_sources --оптимизация=4 -I foo a.cpp b.cpp
Пути включения: foo /opt
Входные файлы: a.cpp b.cpp
Уровень оптимизации: 4
В этом примере значения из конфигурационного файла и командной строки корректно объединяются, при этом значения из командной строки имеют приоритет.