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.
152 lines
4.0 KiB
152 lines
4.0 KiB
# argparse
|
|
A simple header only command line argument parser. I just `snake_case'ed` the main class, thats all. - _xeroxz
|
|
|
|
|Master|Develop|
|
|
|:-:|:-:|
|
|
|[![Build Status](https://travis-ci.com/jamolnng/argparse.svg?branch=master)](https://travis-ci.com/jamolnng/argparse)|[![Build Status](https://travis-ci.com/jamolnng/argparse.svg?branch=develop)](https://travis-ci.com/jamolnng/argparse)|
|
|
|
|
## Table of Contents
|
|
- [Building With Git and CMake](#Building-With-Git-and-CMake)
|
|
* [Make](#build-make)
|
|
* [VSCode and CMake Tools](#build-vscode)
|
|
* [Visual Studio](#build-vsc)
|
|
- [Example](#Example)
|
|
- [Usage](#Usage)
|
|
- [Running Tests](#Running-Tests)
|
|
* [Make](#test-make)
|
|
* [VSCode and CMake Tools](#test-vscode)
|
|
* [Visual Studio](#test-vsc)
|
|
- [Contributing](#Contributing)
|
|
- [License](#License)
|
|
|
|
## Building With Git and CMake
|
|
[Git](https://git-scm.com) and [CMake](https://cmake.org/)
|
|
### <a name="build-make"></a>Make
|
|
[Make](https://www.gnu.org/software/make/)
|
|
```bash
|
|
git clone https://github.com/jamolnng/argparse.git
|
|
cd argparse
|
|
mkdir build && cd build
|
|
cmake ..
|
|
make
|
|
```
|
|
### <a name="build-vscode"></a>VSCode and CMake Tools
|
|
[VSCode](https://code.visualstudio.com/) and [CMake Tools extension](https://marketplace.visualstudio.com/items?itemName=ms-vscode.cmake-tools)
|
|
|
|
TODO
|
|
### <a name="build-vsc"></a>Visual Studio
|
|
[Visual Studio Community](https://visualstudio.microsoft.com/vs/community/)
|
|
|
|
TODO
|
|
## Example
|
|
```cpp
|
|
#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
|
|
### <a name="test-make"></a>Make
|
|
```bash
|
|
make test
|
|
```
|
|
###
|
|
### <a name="test-vscode"></a>VSCode and CMake Tools
|
|
TODO
|
|
### <a name="test-vsc"></a>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.
|
|
|
|
## License
|
|
[Apache-2.0-with-LLVM-Exception](./LICENSE.Apache-2.0-with-LLVM-Exception) or [GPL-3.0](./LICENSE.GPL-3.0)
|