6.5 KiB
6.5 KiB
CArgParse
C语言易用的命令参数分析
特性
- 自动生成帮助信息
- 命令自动帮助信息
- 默认值支持
- 子命令支持
- 命令参数支持
- 全局参数
- 互斥参数(即将)
安装
cmake安装
cmake -S . -B build
cmake --build build
cmake --install build
conan安装
将库构建为conan包
conan create .
示例程序
构建简单的命令行程序,更多示例请参考example目录
#include "ArgParse.h"
#include <stdbool.h>
#include <stdio.h>
#include <string.h>
ArgParse *Init() {
ArgParse *ap = argParseInit("简单的命令行工具示例",ArgParseNOVALUE);
// 添加第一个命令
Command *cmd = argParseAddCommand(
ap, "list", "列出文件列表", NULL, NULL, NULL, ArgParseSINGLEVALUE);
// 添加第一个命令的参数
argParseAddArg(cmd,
"-a",
"--all",
"列出所有文件包括隐藏文件",
NULL,
NULL,
false,
ArgParseNOVALUE);
return ap;
}
int main(int argc, char *argv[]) {
ArgParse *ap = Init();
argParseParse(ap, argc, argv);
char *dir = argParseGetCurCommandValue(ap);
if (dir != NULL) {
printf("列出目录: %s 的文件列表\n", dir);
}
if (argParseCheckCurArgTriggered(ap, "-a")) {
printf("触发了 -a 参数,列出所有文件\n");
}
argParseFree(ap);
return 0;
}
example -h
API
该API将分为两类,一类是用于构造解析器,另一类将用于解析参数
构造解析器
- 初始化解析器
ArgParse *argParseInit(char *documentation,ArgParseValueType value_type);
documentation解析器的文档信息valueType程序本身需要的值类型
- 添加命令
Command *argParseAddCommand(ArgParse *argParse,
char *name,
char *help,
char *default_val,
ArgParseCallback callback,
CommandGroup *group,
ArgParseValueType value_type);
argParse解析器name命令名称help命令帮助信息defaultVal默认值callback命令回调函数(可选)group命令组(可选)valueType命令参数类型
- 添加命令参数
CommandArgs *argParseAddArg(Command *command,
char *short_opt,
char *long_opt,
char *help,
char *default_val,
ArgParseCallback callback,
bool required,
ArgParseValueType value_type);
command命令shortOpt短选项longOpt长选项help帮助信息defaultVal默认值callback回调函数(可选)required是否必须valueType参数类型
- 添加子命令
Command *argParseAddSubCommand(Command *Parent,
char *name,
char *help,
char *default_val,
ArgParseCallback callback,
CommandGroup *group,
ArgParseValueType value_type);
Parent父命令name命令名称help命令帮助信息defaultVal默认值callback回调函数(可选)group命令组(可选)valueType命令参数类型
- 添加全局参数
CommandArgs *argParseAddGlobalArg(ArgParse *argParse,
char *short_opt,
char *long_opt,
char *help,
char *default_val,
ArgParseCallback callback,
bool required,
ArgParseValueType value_type);
argParse解析器shortOpt短选项longOpt长选项help帮助信息defaultVal默认值callback回调函数(可选)required是否必须valueType参数类型
解析参数API
- 解析参数
void argParseParse(ArgParse *argParse, int argc, char *argv[]);
argParse解析器argc参数个数argv参数列表
- 获取当前解析到的命令名字
char *argParseGetCurCommandName(ArgParse *argParse);
argParse解析器
注意,解析到的命令为最后一次出现的命令,也可能是子命令
- 获取当前命令的值
char *argParseGetCurCommandValue(ArgParse *argParse);
argParse解析器
注意,解析到的命令为最后一次出现的命令,也可能是子命令
- 获取当前命令的某个参数的值
char *argParseGetCurArg(ArgParse *argParse, char *opt);
argParse解析器opt参数选项
- 获取当前命令的某个选项的值列表(当为多值类型时使用该函数)
char **argParseGetCurArgList(ArgParse *argParse, char *opt, int *len);
argParse解析器opt参数选项len参数个数
- 获取全局选项的值
char *argParseGetGlobalArg(ArgParse *argParse, char *opt);
argParse解析器opt参数选项
- 获取全局选项的值列表
char **argParseGetGlobalArgList(ArgParse *argParse, char *opt, int *len);
argParse解析器opt参数选项len参数个数
- 获取程序值
该值为非命令的值,类似
gcc main.c,该类程序没有使用命令,因此该值就是main.c
char *argParseGetVal(ArgParse *argParse);
char **argParseGetValList(ArgParse *argParse, int *len);
argParse解析器len参数个数
触发检测API
- 检测当前检测的命令的某个选项是否触发
bool argParseCheckCurArgTriggered(ArgParse *argParse, char *opt);
argParse解析器opt参数选项
- 检测某个命令是否被触发
bool argParseCheckCommandTriggered(ArgParse *argParse, char *command_name);
argParse解析器command_name命令名称
- 检测某个全局选项是否被触发
bool argParseCheckGlobalTriggered(ArgParse *argParse, char *opt);
argParse解析器opt参数选项
