CentOS7.5下使用Boost.Program_options解析命令行参数
之前在Linux下使用getopt函数解析命令行参数,Boost也提供了Program_options解析命令行参数,现整理如下:
一、安装Boost依赖环境
yum -y install boost-devel boost-static
Linux下源码编译安装参考官方文档:https://www.boost.org/doc/libs/1_76_0/more/getting_started/unix-variants.html.
二、简单示例
官方参考示例文档:https://www.boost.org/doc/libs/1_76_0/doc/html/program_options/tutorial.html.
// Copyright Vladimir Prus 2002-2004.
// Distributed under the Boost Software License, Version 1.0.
// (See accompanying file LICENSE_1_0.txt
// or copy at http://www.boost.org/LICENSE_1_0.txt)
/* The simplest usage of the library.
*/
#include <boost/program_options.hpp>
namespace po = boost::program_options;
#include <iostream>
#include <iterator>
using namespace std;
int main(int ac, char* av[])
{
try {
po::options_description generic("Generic options");
//help为长参数名,h为短参数名
generic.add_options()
("help,h", "show help.");
po::options_description desc("Allowed options");
desc.add_options()
("compression,c", po::value<double>(), "set compression level")
("no-name", po::value<string>(), "no name")
;
//不指定参数名时,则默认参数名为no-name
po::positional_options_description p;
p.add("no-name", -1);
po::options_description all;
all.add(generic).add(desc);
//vm存储参数名-参数值
po::variables_map vm;
//po::store(po::parse_command_line(ac, av, all), vm);
po::store(po::command_line_parser(ac, av).
options(all).positional(p).run(), vm);
po::notify(vm);
if (vm.count("help")) {
//打印帮助信息
cout << all << "\n";
return 0;
}
if (vm.count("compression")) {
cout << "Compression level was set to "
<< vm["compression"].as<double>() << ".\n";
} else {
cout << "Compression level was not set.\n";
}
if (vm.count("no-name"))
{
cout << "no-name are: "
<< vm["no-name"].as<string>() << "\n";
}
}
catch(exception& e) {
cerr << "error: " << e.what() << "\n";
return 1;
}
catch(...) {
cerr << "Exception of unknown type!\n";
}
return 0;
}
1、编译:g++ program_options_test.cpp -o program_options_test -lboost_program_options
2、boost_program_options库位置
3、查看依赖:ldd program_options_test
4、测试
(1)打印帮助信息:./program_options_test -h
(2)设置参数:./program_options_test -c 100 --no-name test
(3)不输入test的参数名:./program_options_test -c 100 test