To use, just #include <lyra/lyra.hpp>

A parser for a single option can be created like this:

int width = 0 ; auto cli = lyra :: cli () | lyra :: opt ( width , "width" ) [ "-w" ][ "--width" ] ( "How wide should it be?" );

You can use this parser directly like this:

auto result = cli . parse ( { argc , argv } ); if ( ! result ) { std :: cerr << "Error in command line: " << result . errorMessage () << std :: endl ; exit ( 1 ); } // Everything was ok, width will have a value if supplied on command line.

Note that exceptions are not used for error handling.

You can combine parsers by composing with | , like this:

int width = 0 ; std :: string name ; bool doIt = false ; std :: string command ; auto cli = lyra :: opt ( width , "width" ) [ "-w" ][ "--width" ] ( "How wide should it be?" ) | lyra :: opt ( name , "name" ) [ "-n" ][ "--name" ] ( "By what name should I be known" ) | lyra :: opt ( doIt ) [ "-d" ][ "--doit" ] ( "Do the thing" ) | lyra :: arg ( command , "command" ) ( "which command to run" );

opt specifies options that start with a short dash ( - ) or long dash ( -- ). Options can be argument taking (such as -w 42 ), in which case the opt takes a second argument — a hint, or they are pure flags (such as -d ), in which case the opt has only one argument — which must be a boolean. The option names are provided in one or more sets of square brackets, and a description string can be provided in parentheses. The first argument to an opt is any variable, local, global member, of any type that can be converted from a string using std::ostream .

arg specifies arguments that are not tied to options, and so have no square bracket names. They otherwise work just like opt .

A usage string can be obtained by inserting the parser into a stream. The usage string is built from the information supplied.