- Linux
- CMake
- Conan
- A C++20-capable compiler
g++is the primary verified path for this repositoryclang++should also work for normal builds
-
Install dependencies:
make deps
-
Configure the default debug tree:
make configure
-
Build everything:
make build
-
Run tests:
make test
The default build directory is _build/debug.
If you prefer to drive CMake yourself, install Conan dependencies first and then configure explicitly:
conan install . --output-folder=_build/debug --build=missing \
--profile:build=./conan.profile --profile:host=./conan.profile
cmake -S . -B _build/debug \
-DCMAKE_BUILD_TYPE=Debug \
-DCMAKE_TOOLCHAIN_FILE=$(pwd)/_build/debug/build/Debug/generators/conan_toolchain.cmakeExamples of enabling CMake options directly from the terminal:
cmake -S . -B _build/debug \
-DCMAKE_BUILD_TYPE=Debug \
-DCMAKE_TOOLCHAIN_FILE=$(pwd)/_build/debug/build/Debug/generators/conan_toolchain.cmake \
-DENABLE_IWYU=ONcmake -S . -B _build/debug \
-DCMAKE_BUILD_TYPE=Debug \
-DCMAKE_TOOLCHAIN_FILE=$(pwd)/_build/debug/build/Debug/generators/conan_toolchain.cmake \
-DENABLE_CLANG_TIDY=ON \
-DENABLE_HARDENING=ONcmake -S . -B _build/debug \
-DCMAKE_BUILD_TYPE=Debug \
-DCMAKE_TOOLCHAIN_FILE=$(pwd)/_build/debug/build/Debug/generators/conan_toolchain.cmake \
-DENABLE_ASAN=ONSanitizers are probed at configure time. If the active compiler/runtime does not support a requested sanitizer, configuration fails early with a direct message.
Build only the example applications:
make examplesRun include analysis:
make iwyuRun include analysis and auto-apply fixes:
make iwyu-fixIf you want IWYU rationale comments added to include lines:
make iwyu-fix IWYU_FIX_ARGS="--nosafe_headers --comments --update_comments"Format the repository's CMake files with the checked-in policy:
make format-cmakeThis uses .cmake-format.yaml.
Generate HTML documentation:
make docsServe the generated documentation locally:
make docs-serveThe generated HTML is written under _build/docs/html.
This repository includes a VS Code dev container configuration under .devcontainer/.
Conceptually, a dev container is just a reproducible development environment described with a Dockerfile plus a small metadata file. Instead of installing all compilers, tools, and editor integrations directly on the host machine, you open the repository inside that container and work against the same toolchain every time.
Typical usage in VS Code:
-
Install the
Dev Containersextension. -
Open the repository in VS Code.
-
Run
Dev Containers: Reopen in Containerfrom the command palette. -
Once the container finishes building, run the normal repo commands from the integrated terminal:
make deps make build make test
The container installs GCC, Clang, Conan, CMake, clang-tidy, Doxygen, and the other tools used by this repository.
The devcontainer metadata is designed primarily for VS Code and the Dev Containers ecosystem. That is the smoothest path if you want one-click "open this repo in the container" behavior.
You can still use the same container idea with Neovim, but usually not through
the devcontainer.json file directly. The typical approaches are:
- Start the container with Docker or a devcontainer-compatible CLI.
- Open a shell inside the running container.
- Run
nviminside that shell, or attach your terminal to the container and work there.
So the short answer is:
- VS Code: direct first-class devcontainer support.
- Neovim: yes, but usually by entering the container shell and running Neovim inside it rather than by having Neovim interpret devcontainer metadata itself.