A simple header only command line argument parser
Master | Develop |
---|---|
git clone https://github.com/jamolnng/argparse.git
cd argparse
mkdir build && cd build
cmake ..
make
VSCode and CMake Tools extension
TODO
TODO
#include <iostream>
#include <iterator>
#include "argparse.h"
using namespace argparse;
int main(int argc, const char* argv[]) {
ArgumentParser parser("example", "Argument parser example");
parser.add_argument()
.names({"-v", "--verbose"})
.description("verbose level")
.required(true);
parser.add_argument("-t", "--test", "test", true)
.position(ArgumentParser::Argument::Position::LAST);
parser.add_argument("-d", "--dtest", "dtest", true).position(0);
parser.enable_help();
auto err = parser.parse(argc, argv);
if (err) {
std::cout << err << std::endl;
return -1;
}
if (parser.exists("help")) {
parser.print_help();
return 0;
}
if (parser.exists("v")) {
switch (parser.get<unsigned int>("v")) {
case 2:
std::cout << "an even more verbose string" << std::endl;
#ifdef __clang__
[[clang::fallthrough]];
#endif
// fall through
case 1:
std::cout << "a verbose string" << std::endl;
#ifdef __clang__
[[clang::fallthrough]];
#endif
// fall through
default:
std::cout << "some verbosity" << std::endl;
}
}
if (parser.exists("test")) {
std::cout << parser.get<std::string>("test") << std::endl;
}
if (parser.exists("dtest")) {
std::cout << parser.get<std::string>("dtest") << std::endl;
}
}
Example output:
> program "something" -v 2 "something else"
an even more verbose string
a verbose string
some verbosity
something else
something
> program "something" -v=1 "something else"
a verbose string
some verbosity
something else
something
> program "something" --verbose "something else"
some verbosity
something else
something
> program -h
Usage: example [options...] [t] [d]
Options:
-v, --verbose verbose level (Required)
-t, --test test (Required)
-d, --dtest dtest (Required)
-h, --help Shows this page
> program
Required argument not found: -v
TODO
- Positional argumeents
- More error checking
- Think of more things to do
make test
TODO
TODO
Pull requests are welcome. For major changes, please open an issue first to discuss what you would like to change.
Please make sure to update tests as appropriate.