A lightweight cross-platform getopt alternative that is tested on Linux, Windows, FreeBSD and macOS. Command line argument parser library for C/C++. Can be used to parse argv and argc parameters.
This is a lighweight C command line argument library which does not require any malloc. It is currently compiled and tested under Linux, FreeBSD, macOS and Windows.
Please have a look at the reference for detailed information. Some features this library includes:
Building, embedding and testing instructions are available in the documentation (it's very easy).
All the documentation is available in the the github page of this repository.
First define the options:
static struct cag_option options[] = {
{.identifier = 's',
.access_letters = "s",
.access_name = NULL,
.value_name = NULL,
.description = "Simple flag"},
{.identifier = 'm',
.access_letters = "mMoO",
.access_name = NULL,
.value_name = NULL,
.description = "Multiple access letters"},
{.identifier = 'l',
.access_letters = NULL,
.access_name = "long",
.value_name = NULL,
.description = "Long parameter name"},
{.identifier = 'k',
.access_letters = "k",
.access_name = "key",
.value_name = "VALUE",
.description = "Parameter value"},
{.identifier = 'h',
.access_letters = "h",
.access_name = "help",
.description = "Shows the command help"}};
And then just iterate argv
:
int main(int argc, char *argv[])
{
bool simple_flag = false, multiple_flag = false, long_flag = false;
const char *value = NULL;
int param_index;
cag_option_context context;
cag_option_init(&context, options, CAG_ARRAY_SIZE(options), argc, argv);
while (cag_option_fetch(&context)) {
switch (cag_option_get_identifier(&context)) {
case 's':
simple_flag = true;
break;
case 'm':
multiple_flag = true;
break;
case 'l':
long_flag = true;
break;
case 'k':
value = cag_option_get_value(&context);
break;
case 'h':
printf("Usage: cargsdemo [OPTION]...\n");
printf("Demonstrates the cargs library.\n\n");
cag_option_print(options, CAG_ARRAY_SIZE(options), stdout);
return EXIT_SUCCESS;
case '?':
cag_option_print_error(&context, stdout);
break;
}
}
printf("simple_flag: %i, multiple_flag: %i, long_flag: %i, key: %s\n",
simple_flag, multiple_flag, long_flag, value ? value : "-");
return EXIT_SUCCESS;
}
foo@bar:~$ ./cargsdemo
simple_flag: 0, multiple_flag: 0, long_flag: 0, key: -
foo@bar:~$ ./cargsdemo -k=test -sm --long
simple_flag: 1, multiple_flag: 1, long_flag: 1, key: test
foo@bar:~$ ./cargsdemo --help
Usage: cargsdemo [OPTION]...
Demonstrates the cargs library.
-s Simple flag
-m, -M, -o, -O Multiple access letters
--long Long parameter name
-k, --key=VALUE Parameter value
-h, --help Shows the command help
Note that all formatting is done by cargs.
The complete example can be found in the ./demo/
folder of this repository.