Originally derived from XUJINKAI/cmdparser
Command parser library (C/C++), with highly customizable.
- Friendly API, configuration in ONE struct
- Follow GNU/POSIX option conversion, short/long option supported
- Nested sub-commands support, and they can share same logic
- Global option supported
- Parse strict: repeat option detect
- Highly customizable: Hide/Disable options or sub-commands, Language (error message), help option, doc generator, output stream, etc.
Short option: -a -b -n XJK can be shorten to -abn XJK (-nab XJK as well)
Long option: --name=XJK can be write as --name XJK
End of option: -all -- -abc, -abc will be treat as argument
Global option can behind sub-command: git status --git-dir=.git :)
Repeat option detect: -a -b -a will cause error
simple is an basic demo about parse options.
git follows git commands demos how to handle complex sub-commands/options.
tests Unit Tests covers most features.
Define an global struct and call cmdp_run.
static cmdp_command_st cmdp = {
    .options = {
        {'i', "Int", "Input Int Option", CMDP_TYPE_INT4, &arg.i},
        {0},                        // ends with {0}
    },
    .fn_process = callback,         // called after options parsed
};
int main(int argc, char **argv)
{
    return cmdp_run(argc - 1, argv + 1, &cmdp, NULL);
}Set sub_commands field, nested can be infinite.
static cmdp_command_st cmdp = {
    .options = {...},
    .sub_commands = (cmdp_command_st*[]){
        &(cmdp_command_st){
            .name = "sub",
            .options = {...},
            .fn_process = sub_callback,
        },
        NULL,                        // ends with NULL
    },
};See test/chinese_error_msg_test.c
You can custom your own error message.