forked from CLIUtils/CLI11
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
5 changed files
with
80 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
add_cli_exe(main main.cpp subcommand_a.cpp subcommand_a.hpp) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,20 @@ | ||
// =================================================================== | ||
// main.cpp | ||
// =================================================================== | ||
|
||
#include "subcommand_a.hpp" | ||
|
||
int main( int argc, char** argv ) { | ||
CLI::App app{"..."}; | ||
|
||
// Call the setup functions for the subcommands. | ||
// They return their option structs, so that the variables to which the options bind | ||
// are still alive when `app.parse()` is called. | ||
auto subcommand_a_opt = setup_subcommand_a( app ); | ||
|
||
// More setup if needed, i.e., other subcommands etc. | ||
|
||
CLI11_PARSE(app, argc, argv); | ||
|
||
return 0; | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,39 @@ | ||
// =================================================================== | ||
// subcommand_a.cpp | ||
// =================================================================== | ||
|
||
#include "subcommand_a.hpp" | ||
|
||
/// Set up a subcommand and return a unique ptr to a struct that holds all its options. | ||
/// The variables of the struct are bound to the CLI options. | ||
/// We use a unique ptr so that the addresses of the variables are stable for binding, | ||
/// and return it to the caller (main), so that the object itself stays alive. | ||
std::unique_ptr<SubcommandAOptions> setup_subcommand_a( CLI::App& app ) | ||
{ | ||
// Create the option and subcommand objects. | ||
auto opt = std::unique_ptr<SubcommandAOptions>(new SubcommandAOptions()); | ||
auto sub = app.add_subcommand( "subcommand_a", "performs subcommand a", true ); | ||
|
||
// Add options to sub, binding them to opt. | ||
sub->add_option("-f,--file", opt->file, "File name"); | ||
sub->add_flag("--with-foo", opt->with_foo, "Counter"); | ||
|
||
// Set the run function as callback to be called when this subcommand is issued. | ||
sub->set_callback( [&]() { | ||
run_subcommand_a( *opt ); | ||
}); | ||
|
||
return opt; | ||
} | ||
|
||
/// The function that runs our code. | ||
/// This could also simply be in the callback lambda itself, | ||
/// but having a separate function is cleaner. | ||
void run_subcommand_a( SubcommandAOptions const& opt ) | ||
{ | ||
// Do stuff... | ||
std::cout << "Working on file: " << opt.file << std::endl; | ||
if( opt.with_foo ) { | ||
std::cout << "Using foo!" << std::endl; | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,18 @@ | ||
// =================================================================== | ||
// subcommand_a.hpp | ||
// =================================================================== | ||
|
||
#include "CLI/CLI.hpp" | ||
#include <memory> | ||
#include <string> | ||
|
||
/// Collection of all options of Subcommand A. | ||
struct SubcommandAOptions | ||
{ | ||
std::string file; | ||
bool with_foo; | ||
}; | ||
|
||
// Function declarations. | ||
std::unique_ptr<SubcommandAOptions> setup_subcommand_a( CLI::App& app ); | ||
void run_subcommand_a( SubcommandAOptions const& opt ); |