bootstrap/specs/clang/template
Joshua Potter 5311fc0cef Migrate clang project to fuller CMake configuration. 2023-12-21 18:08:21 -05:00
..
.githooks
include Migrate clang project to fuller CMake configuration. 2023-12-21 18:08:21 -05:00
src Migrate clang project to fuller CMake configuration. 2023-12-21 18:08:21 -05:00
test Migrate clang project to fuller CMake configuration. 2023-12-21 18:08:21 -05:00
.clang-format
.envrc
.gitignore Migrate clang project to fuller CMake configuration. 2023-12-21 18:08:21 -05:00
CMakeLists.txt Migrate clang project to fuller CMake configuration. 2023-12-21 18:08:21 -05:00
Doxyfile
README.md Migrate clang project to fuller CMake configuration. 2023-12-21 18:08:21 -05:00
compile_commands.json Migrate clang project to fuller CMake configuration. 2023-12-21 18:08:21 -05:00
default.nix
flake.lock
flake.nix Migrate clang project to fuller CMake configuration. 2023-12-21 18:08:21 -05:00
main.c Migrate clang project to fuller CMake configuration. 2023-12-21 18:08:21 -05:00

README.md

Clang Flake Template

This is a template for constructing a working environment for C/C++ development with the clang (version 16.0.6) toolchain. direnv can be used to launch a dev shell upon entering this directory (refer to .envrc). Otherwise run via:

$ nix develop

Building

We use CMake (version 3.27.7) to build the project. When first starting the project, we recommend running the following commands:

$ mkdir -p build/{Debug,Release}
$ (cd build/Debug && cmake -DCMAKE_BUILD_TYPE=Debug ../..)
$ (cd build/Release && cmake -DCMAKE_BUILD_TYPE=Release ../..)

This will create a CMake cache file in each subdirectory with the build types set. Now you can build a Debug or Release variant by navigating to the corresponding subdirectory and running:

$ cmake --build .

Language Server

The clangd LSP (version 14.0.6) is included in this flake. The codelldb VSCode plugin is also included to interface with the LSP. Note this plugin, despite its name, is compatible with other editors (e.g. neovim). To configure, refer to your editor's documentation.

To use the LSP across files, a compilation database must be generated. The CMakeLists.txt file already enables this in the Debug configuration type. A top-level compile_commands.json symbolic link already exists and points to this generated database.

Documentation

Documentation is generated using Doxygen (version 1.9.7). (Re)generate documentation by editing the Doxyfile and running:

$ doxygen

Testing

We use CTest (version 3.27.7) for unit testing. To run the tests, navigate to build/Debug and type the following:

$ cmake --build .
$ make test

Formatting

Formatting depends on the clang-format (version 14.0.6) tool. Refer to .clang-format for default formatting options. A pre-commit hook is included in .githooks that can be used to format all *.c(pp)? and *.h(pp)? files prior to commit. Install via:

$ git config --local core.hooksPath .githooks/

If running direnv, this hook is installed automatically when entering the directory.