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参数选项
