example code
This commit is contained in:
@@ -6,6 +6,8 @@ project(argparse LANGUAGES CXX VERSION 0.1.0.0)
|
|||||||
set(CMAKE_CXX_EXTENSIONS OFF)
|
set(CMAKE_CXX_EXTENSIONS OFF)
|
||||||
set(CMAKE_CXX_STANDARD 11)
|
set(CMAKE_CXX_STANDARD 11)
|
||||||
|
|
||||||
|
add_subdirectory(examples)
|
||||||
|
|
||||||
# "this command should be in the source directory root for CTest to find the test file"
|
# "this command should be in the source directory root for CTest to find the test file"
|
||||||
enable_testing()
|
enable_testing()
|
||||||
add_subdirectory(test)
|
add_subdirectory(test)
|
||||||
|
31
examples/CMakeLists.txt
Normal file
31
examples/CMakeLists.txt
Normal file
@@ -0,0 +1,31 @@
|
|||||||
|
macro(add_args tgt)
|
||||||
|
target_compile_options(
|
||||||
|
${tgt}
|
||||||
|
PUBLIC
|
||||||
|
-Wall;
|
||||||
|
-Wextra;
|
||||||
|
-Wpedantic;
|
||||||
|
-Wcast-align;
|
||||||
|
-Wdisabled-optimization;
|
||||||
|
-Winit-self;
|
||||||
|
-Wlogical-op;
|
||||||
|
-Wmissing-include-dirs;
|
||||||
|
-Woverloaded-virtual;
|
||||||
|
-Wpointer-arith;
|
||||||
|
-Wshadow;
|
||||||
|
-Wstrict-aliasing;
|
||||||
|
-Wswitch-enum;
|
||||||
|
-Wundef;
|
||||||
|
-Wvla;
|
||||||
|
-Wformat=2;
|
||||||
|
)
|
||||||
|
endmacro()
|
||||||
|
|
||||||
|
macro(add_example EXE SRCS)
|
||||||
|
add_executable(${EXE} ${SRCS})
|
||||||
|
add_args(${EXE})
|
||||||
|
target_include_directories(${EXE} SYSTEM PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/../include)
|
||||||
|
endmacro()
|
||||||
|
|
||||||
|
add_example(example1 example1.cpp)
|
||||||
|
|
45
examples/example1.cpp
Normal file
45
examples/example1.cpp
Normal file
@@ -0,0 +1,45 @@
|
|||||||
|
#include "argparse/argparse.hpp"
|
||||||
|
|
||||||
|
int main(int argc, char **argv) {
|
||||||
|
|
||||||
|
// A parser object
|
||||||
|
Parser p;
|
||||||
|
|
||||||
|
// Program data corresponding to flags, options, and positional arguments
|
||||||
|
bool verbose = false;
|
||||||
|
std::string toPrint;
|
||||||
|
std::string maybePrint;
|
||||||
|
int repeats = 1;
|
||||||
|
|
||||||
|
// Inform the parser of the program data.
|
||||||
|
// It will do type-specific conversion
|
||||||
|
p.add_option(repeats, "--repeat");
|
||||||
|
p.add_flag(verbose, "--verbose", "-v");
|
||||||
|
p.add_positional(toPrint)->required();
|
||||||
|
auto psnl = p.add_positional(maybePrint);
|
||||||
|
|
||||||
|
// If there was an error during parsing, report it.
|
||||||
|
if (!p.parse(argc, argv)) {
|
||||||
|
std::cerr << p.help();
|
||||||
|
exit(EXIT_FAILURE);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Execute the program logic
|
||||||
|
if (verbose) {
|
||||||
|
std::cerr << "about to print '" << toPrint << "' " << repeats << " times";
|
||||||
|
if (psnl->found()) {
|
||||||
|
std::cerr << ", then '" << maybePrint << "'";
|
||||||
|
}
|
||||||
|
std::cerr << std::endl;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (int i = 0; i < repeats; ++i) {
|
||||||
|
std::cout << toPrint;
|
||||||
|
}
|
||||||
|
if (psnl->found()) {
|
||||||
|
std::cout << maybePrint;
|
||||||
|
}
|
||||||
|
std::cout << std::endl;
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
Reference in New Issue
Block a user