argparse
A simple header only command line argument parser
Master | Develop |
---|---|
Table of Contents
Building With Git and CMake
Make
git clone https://github.com/jamolnng/argparse.git
cd argparse
mkdir build && cd build
cmake ..
make
VSCode and CMake Tools
VSCode and CMake Tools extension
TODO
Visual Studio
TODO
Example
#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
Usage
TODO
TODO
- Positional argumeents
- More error checking
- Think of more things to do
Running Tests
Make
make test
VSCode and CMake Tools
TODO
Visual Studio
TODO
Contributing
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.