一、安装boost库
sudo apt-get install libboost-dev
aptitude search boost
二、编写测试代码
1 #include <iostream> 2 #include <string> 3 #include <boost/program_options.hpp> 4 5 namespace bpo = boost::program_options; 6 using namespace std; 7 8 int main(int argc, char const *argv[]) 9 { 10 //步骤1:构造选项描述器 11 //选项描述起,其参数为该描述器名字 12 bpo::options_description opts("all options"); 13 //选项存储器,继承自map容器 14 bpo::variables_map vm; 15 16 //步骤2:为选项描述器增加选项 17 //其参数依次为:key,value的类型,该选项描述 18 opts.add_options() 19 ("filename", bpo::value<std::string>(), "the file name which want to be found") 20 ("help", "this is a program to find a specified file"); 21 22 //步骤3:先对命令行输入的参数做解析,而后将其存入选项存储器 23 //如果输入了未定义的选项,程序会抛出异常,所以对解析代码要用try-catch块包围 24 try { 25 //parse_command_line()对输入的选项做解析 26 //store()将解析后的结果存入选项存储器 27 bpo::store(bpo::parse_command_line(argc, argv, opts), vm); 28 } catch(...) { 29 std::cout<<"Input option not exsited."<<std::endl; 30 return 0; 31 } 32 33 //步骤4:参数解析完毕,处理实际信息 34 //count()检测该选项是否被输入 35 if(vm.count("help")) { //若参数中有help选项 36 //options_description对象支持流输出,会自动打印所有的选项信息 37 std::cout<<opts<<std::endl; 38 } 39 if(vm.count("filename")) { 40 //variables_map(选项存储器)是std::map的派生类,可以像关联容器一样使用, 41 //通过operator[]来取出其中的元素,但其内部的元素类型value_type是boost::any, 42 //用来存储不确定类型的参数值,必须通过模版成员函数as<type>()做类型转换后, 43 //才能获取其具体值 44 std::cout<<"find"<<vm["filename"].as<std::string>()<<std::endl; 45 } 46 if(vm.empty()) { 47 std::cout<<"no options found"<<std::endl; 48 } 49 return 0; 50 }
编译时要加上库名字:
g++ -o s main.cpp -lboost_program_options
使用效果:
pi@raspberrypi:~/chen_DIR/weihua/myoptions $ ./s --help all options: --filename arg the file name which want to be found --help this is a program to find a specified file pi@raspberrypi:~/chen_DIR/weihua/myoptions $ ./s --filename s finds