_____ _ _____ _____
/ ____|| | __ _ | __ \ | __ \
| | | |/ _` || |__) || |__) |
| | |_|\__,_|| ___/ | ___/
| |____ | | | |
\_____| |_| |_|
libClaPP is an open source command line argument processing library for C++. It supports the processing of GNU options (long and short options) as well as positional arguments. It is a strongly typed library that can be used to parse the command line arguments into the correct type, validate the arguments using custom constraints and automatically generates a help message with respect to the types and the constraints.
Besides the dependency to CMake, the library libClaPP
only depends on the GSL. Note: this repository ships with an appropriate version of GSL as git-submodule.
If the unit tests of this libray should be built too (can be selected by the CMake option -DlibClaPP_BUILD_TESTS=On
), also google test is required (is also shipped as git-submodule dependency).
If the listings in the doc/-folder should be extracted and build too, a Raku-(Perl 6)-interpreter is required. A very common Raku interpreter is Rakudo, which can be installed on Debian/Ubuntu by executing apt install rakudo
. Just give the CMake option -DlibClaPP_BUILD_DOC_CODE=On
to build the code in the documentation.
Since all build dependencies are already included in this repository as submodules, you may prefer to use the shipped dependencies via the CMake option libClaPP_SUBMODULE_DEPENDENCIES
enabled:
git clone --recurse-submodules https://git.libclapp.org/libclapp/clapp.git
mkdir build
cd build
cmake .. -DlibClaPP_SUBMODULE_DEPENDENCIES=On
cmake --build .
But if all dependencies are installed on your system, the following steps are sufficient.
git clone https://git.libclapp.org/libclapp/clapp.git
mkdir build
cd build
cmake ..
cmake --build .
Set GCOV_EXECUTABLE
accordingly (i.e. llvm-cov-11 gcov
, gcov-10
)
git clone --recurse-submodules https://git.libclapp.org/libclapp/clapp.git
mkdir build
cd build
cmake -DlibClaPP_BUILD_TESTS=On -DlibClaPP_BUILD_COVERAGE=On -DlibClaPP_SUBMODULE_DEPENDENCIES=On -DCMAKE_BUILD_TYPE=Debug ..
cmake --build .
ctest -V -R libclapp_tests
gcovr -r ../ -e ../third_party/ -e ../tests/ -e ../examples/ -e doc/ -e ../doc/ --gcov-executable="${GCOV_EXECUTABLE}"
Set GCOV_EXECUTABLE
accordingly (i.e. llvm-cov-11 gcov
, gcov-10
)
git clone --recurse-submodules https://git.libclapp.org/libclapp/clapp.git
mkdir build
cd build
cmake -DlibClaPP_BUILD_TESTS=On -DlibClaPP_BUILD_EXAMPLES=On -DlibClaPP_BUILD_COVERAGE=On -DlibClaPP_SUBMODULE_DEPENDENCIES=On -DCMAKE_BUILD_TYPE=Debug ..
cmake --build .
ctest -V -R libclapp_tests
gcovr -r ../ -e ../third_party/ -e ../tests/ -e ../examples/ -e doc/ -e ../doc/ --gcov-executable="${GCOV_EXECUTABLE}"
ctest -V -E libclapp_tests
LibClaPP can be built with the following GCC/Clang-sanitizers: Address sanitizer, memory sanitizer, undefined behavior sanitizer or a thread sanitizer. To enable these sanitizers, one of the following CMake-options must be enabled (Note: depending on the actual compiler, it may or may not possible to combine different sanitizers):
libClaPP_ENABLE_SANITIZER_ADDRESS
libClaPP_ENABLE_SANITIZER_MEMORY
libClaPP_ENABLE_SANITIZER_UNDEFINED_BEHAVIOR
libClaPP_ENABLE_SANITIZER_THREAD
For easy switching between different sanitizers, the tool ccmake
may be used instead of pure cmake
.
To install the library on your system, add --target install
to the cmake --build
command above (i.e. cmake --build . --target install
).
To uninstall the library, remove all files that were installed:
xargs rm < install_manifest.txt
A short documentation of libClaPP is available in doc/doc.md.
Some examples can be found in the examples folder. Additionally, doc/doc.md also contains a few examples.
For a quick start take a look at examples/short_example.cpp.
Some examples how libClaPP can be used (CMake-subdir, CMake-package, CMake with pkgconfig
, make
with pkgconfig
) can be found in the usage folder.
CXX=clang++-11 CC=clang-11 cmake -DCLANG_TIDY=clang-tidy-11 -DlibClaPP_BUILD_TESTS=On -DlibClaPP_BUILD_EXAMPLES=On -DlibClaPP_SUBMODULE_DEPENDENCIES=On -DlibClaPP_BUILD_COVERAGE=On -DCMAKE_BUILD_TYPE=Debug -DlibClaPP_CLANG_TIDY=On ..
This project uses a clang-format style based on the Google style (clang-format-11 -style=Google -dump-config
) but modified a bit (see .clang-format).
To format the whole project, use the following command:
find src tests examples usage -iname *.h -o -iname *.cpp -o -iname *.c -o -iname *.hpp | xargs clang-format-11 -i