概述
argh
是一个轻量级的 C++ 命令行参数解析库,只需要包含一个头文件即可使用。
github页面:
https://github.com/adishavit/argh
基本用法
#include "argh.h"
创建argh::parser对象
使用parse方法解析命令行
argh::parser重载了括号运算符,使用中括号判断一般的选项(bool类型),使用小括号读取字符串形式的变量值。
例程
cpp
#include "argh.h"
#include <iostream>
using namespace std;
/*run: ./test -a -c=123
output:
a
no b
c = 123
*/
int main(int argc, char* argv[])
{
argh::parser cmdl;
cmdl.parse(argc, argv, argh::parser::PREFER_FLAG_FOR_UNREG_OPTION);
if (cmdl["a"]) cout << "a" << endl;
else cout << "no a" << endl;
if (cmdl["b"]) cout << "b" << endl;
else cout << "no b" << endl;
cout << "c = " << cmdl("c").str() << endl;
return 0;
}
mode参数
parse方法第三个参数有如下取值:
cpp
enum Mode { PREFER_FLAG_FOR_UNREG_OPTION = 1 << 0,
PREFER_PARAM_FOR_UNREG_OPTION = 1 << 1,
NO_SPLIT_ON_EQUALSIGN = 1 << 2,
SINGLE_DASH_IS_MULTIFLAG = 1 << 3,
};
除此之外0也是合法值,可以选多个值做或运算。
PREFER_FLAG_FOR_UNREG_OPTION:不以"-"开头的参数解释为选项(FLAG),可以用中括号读取。"a"和"-a"的含义相同
PREFER_PARAM_FOR_UNREG_OPTION:不以"-"开头的参数解释为上一个参数的值,可以用小括号读取。"-a b"和"-a=b"的含义相同。一般不和PREFER_FLAG_FOR_UNREG_OPTION同时使用。
NO_SPLIT_ON_EQUALSIGN:等号(=)解释为字符串的一部分而非赋值。这个模式不常用。
SINGLE_DASH_IS_MULTIFLAG:超过一个字符的选项解释为多个选项。"-ab"和"-a -b"的含义相同。可以实现类似"tar -zxvf"的功能。
总结
argh
是一个简单易用的 C++ 命令行参数解析库,适合需要快速解析命令行参数的项目。通过上述示例,可以轻松掌握 argh
的基本用法,并根据需要进行扩展。