You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
_xeroxz
1aedaf8bb7
|
4 years ago | |
---|---|---|
.clang-format | 4 years ago | |
.gitattributes | 4 years ago | |
.gitignore | 4 years ago | |
.travis.yml | 4 years ago | |
CMakeLists.txt | 4 years ago | |
LICENSE | 4 years ago | |
LICENSE.Apache-2.0-with-LLVM-Exception | 4 years ago | |
LICENSE.GPL-3.0 | 4 years ago | |
README.md | 4 years ago | |
cli-parser.hpp | 4 years ago |
README.md
argparse
A simple header only command line argument parser. I just snake_case'ed
the main class, thats all. - _xeroxz
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 "cli-parser.hpp"
int main(int argc, const char* argv[]) {
argparse::argument_parser_t 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.