cppcli: c++命令行解析库, 跨平台,仅头文件

背景

cppcli是一个使用c++编写的命令行参数解析库, 要求c++最低版本为c++17, 它具有如下特点:

  • 仅头文件 只需要include该头文件, 就可以快速添加到你的程序中
  • 跨平台 可以在windows和linux平台中使用, 在msvc, gcc, mingw中均能通过编译
  • 简单的API cppcli具有简单的API, 可以快速上手
  • 自动的错误提示 当输入值不符合限制条件时, cppcli会自动给出错误提示
  • 自动生成帮助信息 创建命令时指定提示信息, cppcli将根据这些提示信息, 自动生成全局性的帮助文档
  • 无任何依赖 cppcli没有任何依赖

安装

无需安装, 直接include使用 (点击跳转到cppcli的gitee地址)

快速开始

跳转到代码

    cppcli::Option opt(argc, argv);

    /* 未输入任何参数时, 打印帮助文档并退出程序 */
    opt.emptyPrintHelpThenExit(true);

    /* -s 命令添加 */
    cppcli::Param s_param = opt("-s", "describe -s");
    s_param.limitMustEnter().setDefault("cppcli");   // 设置-s必须输入, 默认值设置为cppcli

    /* -h 命令添加, 帮助命令 */
    cppcli::Param h_param = opt("-h", "gain help doc");
    h_param.setAsHelpParam();


    /*
     * 检查命令行参数; 使用limitXXX() 进行限制的参数, 当其条件不满足时, parse()自动退出程序, 退出前打印错误原因
     */
    opt.parse();

    
    if (s_param.exists())   // 或 cppcli::Option::exists("-s") 或 cppcli::Option::exists(s_param)
    {
        cout << "-s exist, -s = " << s_param.getString() << endl;
    }
    else
    {
        cerr << "-s not exist" << endl;
    }

# 输入了参数但未指定具体的值, parse通过并设置-s为默认值
E:\user\code\cppcli>./fastStart.exe -s
-s exist, -s = cppcli
# 输入了参数并指定了值, parse通过并获得输入值
E:\user\code\cppcli>./fastStart.exe -s hui
-s exist, -s = hui
# 未输入任何参数, 自动打印帮助文档
E:\user\code\cppcli>./fastStart.exe 
workpath: E:\user\code\cppcli\bin
options:
-s              describe -s                                     MUST-ENTER[true]    DEFAULT->cppcli
-h              gain help doc                                   MUST-ENTER[false]   DEFAULT->[EMPTY]
# 输入-h命令, 打印帮助文档
E:\user\code\cppcli>./fastStart.exe -h
workpath: E:\user\code\cppcli\bin
options:
-s              describe -s                                     MUST-ENTER[true]    DEFAULT->cppcli
-h              gain help doc                                   MUST-ENTER[false]   DEFAULT->[EMPTY]

示例

设置参数为必须输入

跳转到代码

    cppcli::Option opt(argc, argv);
 
    /* 添加 -s 参数 */
        cppcli::Param s_param = opt("-s", "describe -s");

    // 限制必须输入, 且输入值必须为列表值之一
    s_param.limitMustEnter().limitOneOf("hui", "zack");


    /* 添加 -h 参数 */
    cppcli::Param h_param = opt("-h", "gain help doc").setAsHelpParam();


    /*
     * 使用limitXXX() 进行限制的参数, 当其限制条件不满足时, parse()自动退出程序, 退出前打印错误提醒
     */
    opt.parse();

    std::cout << opt.getExecPath() << std::endl;

    if (s_param.exists())
    {
        cout << "-s = " << s_param.getInt()<< endl;
    }

# -s参数限制为必须输入, 当用户未输入-s参数时, 自动退出并给出提示
E:\user\code\cppcli>.\bin\limitOneof.exe
Must enter this param: [-s]
Use [-h] gain help doc

限制命令参数的值必须为限定值之一

跳转到代码
使用 limitOneOf 函数, 设置参数值必须为限定值之一. 当输入了 -s 或 --start命令, 但指定的值不为限制列表之一时, parse 不通过, 程序退出并打印错误信息

    cppcli::Option opt(argc, argv);
 
    /* 添加 -s 参数 */
    cppcli::Param s_param = opt("-s", "describe -s");

    // 限制必须输入, 且输入值必须为列表值之一
    s_param.limitMustEnter().limitOneOf("hui", "zack");


    /* 添加 -h 参数 */
    cppcli::Param h_param = opt("-h", "gain help doc").setAsHelpParam();


    /*
     * 使用limitXXX() 进行限制的参数, 当其限制条件不满足时, parse()自动退出程序, 退出前打印错误提醒
     */
    opt.parse();

    std::cout << opt.getExecPath() << std::endl;

    if (s_param.exists())
    {
        cout << "-s = " << s_param.getInt()<< endl;
    }

# -s参数限制为["hui", "zack"]列表值之一, 当用户未输入输入值不符合要求时, 自动退出并给出错误提醒
E:\user\code\cppcli>.\bin\limitOneof.exe -s none
Must be one of these values: [hui, zack], where command param = [-s]
Use [-h] gain help doc

限制为数字类型

跳转到代码

    cppcli::Option opt(argc, argv);

    /* 未输入任何参数时, 打印帮助文档并退出 */
    // opt.emptyPrintHelpThenExit(true);


    /* 添加 -s 参数 */
    cppcli::Param s_param = opt("-s", "describe -s");
    // 限制必须输入, 且输入值必须为整数, 且输入范围必须为[1, 100]之间
    s_param.limitMustEnter().limitInt().limitNumRange(1, 100);   // 整数限制
    // s_param.limitMustEnter().limitDouble().limitNumRange(1, 98.5);   // 浮点数限制


    /* 添加 -h 参数 */
    cppcli::Param h_param = opt("-h", "get help doc");
    h_param.setAsHelpParam();


    /*
     * 使用limitXXX() 进行限制的参数, 当其限制条件不满足时, parse()自动退出程序, 退出前打印错误原因
     */
    opt.parse();

    if (s_param.exists())
    {
        std::cout << "-s = " << s_param.getInt() << std::endl;
    }
# 输入值不为数字时, 
>>  .\bin\limitNum.exe -s str
Please enter the correct type: [ NUMBER (INT) ], where command param = [-s]
Use [-h] gain help doc
# 当输入值为数字但不符合要求的数字范围时
.\bin\limitNum.exe -s 10086
Must be within this range: [1(MIN), 100(MAX)], where command param = [-s]
Use [-h] gain help doc

获取程序相关路径

opt.getExecPath() 返回执行命令时所在的目录全路径, opt.getWorkPath() 返回可执行文件(exe)的安装目录全路径

    cppcli::Option opt(argc, argv);
 
    cppcli::Param s_param = opt("-s", "describe -s");
    cppcli::Param h_param = opt("-h", "gain help doc").setAsHelpParam();

    opt.parse();

    // 执行命令时所在的目录全路径
    std::string execpath = opt.getExecPath();
    // 可执行文件所在目录全路径
    std::string workpath = opt.getWorkPath();

    std::cout << "execpath = " << execpath << std::endl;
    std::cout << "workpath = " << workpath << std::endl;
    if (s_param.exists())
    {
        cout << "-s = " << s_param.getString() << std::endl;
    }

主要项目负责人

@zack_hui

开源协议

MIT © zack hui

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值