Installation
Single file edition
#include <CLI11.hpp>
This example uses the single file edition of CLI11. You can download CLI11.hpp
from the latest release and put it into the same folder as your source code, then compile this with C++ enabled. For a larger project, you can just put this in an include folder and you are set.
Full edition
#include <CLI/CLI.hpp>
If you want to use CLI11 in its full form, you can also use the original multiple file edition. This has an extra utility (Timer
), and is does not require that you use a release. The only change to your code would be the include shown above.
CMake support for the full edition
If you use CMake 3.4+ for your project (highly recommended), CLI11 comes with a powerful CMakeLists.txt file that was designed to also be used with add_subproject
. You can add the repository to your code (preferably as a git submodule), then add the following line to your project (assuming your folder is called CLI11):
add_subdirectory(CLI11)
Then, you will have a target CLI11::CLI11
that you can link to with target_link_libraries
. It will provide the include paths you need for the library. This is the way GooFit uses CLI11, for example.
You can also configure and optionally install CLI11, and CMake will create the necessary lib/cmake/CLI11/CLI11Config.cmake
files, so find_package(CLI11 CONFIG REQUIRED)
also works.
If you use conan.io, CLI11 supports that too.
Running tests on the full edition
CLI11 has examples and tests that can be accessed using a CMake build on any platform. Simply build and run ctest to run the 200+ tests to ensure CLI11 works on your system.
As an example of the build system, the following code will download and test CLI11 in a simple Alpine Linux docker container 1:
gitbook:~ $ docker run -it alpine
root:/ # apk add --no-cache g++ cmake make git
fetch ...
root:/ # git clone https://github.com/CLIUtils/CLI11.git
Cloning into 'CLI11' ...
root:/ # cd CLI11
root:CLI11 # mkdir build
root:CLI11 # cd build
root:build # cmake ..
-- The CXX compiler identification is GNU 6.3.0 ...
root:build # make
Scanning dependencies ...
root:build # make test
Running tests...
Test project /CLI11/build
Start 1: HelpersTest
1/10 Test #1: HelpersTest ...................... Passed 0.01 sec
Start 2: IniTest
2/10 Test #2: IniTest .......................... Passed 0.01 sec
Start 3: SimpleTest
3/10 Test #3: SimpleTest ....................... Passed 0.01 sec
Start 4: AppTest
4/10 Test #4: AppTest .......................... Passed 0.02 sec
Start 5: CreationTest
5/10 Test #5: CreationTest ..................... Passed 0.01 sec
Start 6: SubcommandTest
6/10 Test #6: SubcommandTest ................... Passed 0.01 sec
Start 7: HelpTest
7/10 Test #7: HelpTest ......................... Passed 0.01 sec
Start 8: NewParseTest
8/10 Test #8: NewParseTest ..................... Passed 0.01 sec
Start 9: TimerTest
9/10 Test #9: TimerTest ........................ Passed 0.24 sec
Start 10: link_test_2
10/10 Test #10: link_test_2 ...................... Passed 0.00 sec
100% tests passed, 0 tests failed out of 10
Total Test time (real) = 0.34 sec
For the curious, the CMake options and defaults are listed below. Most options default to off if CLI11 is used as a subdirectory in another project.
Option | Description |
---|---|
CLI11_SINGLE_FILE=ON |
Build the CLI11.hpp file from the sources. Requires Python (version 3 or 2.7). |
CLI11_SINGLE_FILE_TESTS=OFF |
Run the tests on the generated single file version as well |
CLI11_EXAMPLES=ON |
Build the example programs. |
CLI11_TESTING=ON |
Build the tests. |
CLANG_TIDY_FIX=OFF |
Run clang-tidy on the examples and headers and apply fixes. (Changes source code!) Requires LLVM and CMake 3.6+. |
1. Docker is being used to create a pristine disposable environment; there is nothing special about this container. Alpine is being used because it is small, modern, and fast. Commands are similar on any other platform. ↩