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参数选项
								V0.3.2
								
	Latest
							
						
					Languages
				
				
								
								
									C
								
								91.3%
							
						
							
								
								
									CMake
								
								4.6%
							
						
							
								
								
									Python
								
								4.1%
							
						
					