| NOTE: | The repository-level README.rst is a symlink to this file, so they
are the same canonical document. |
|---|---|
| Author: | drgeoffathome@gmail.com |
| Date: | 2026-05-09 |
| Version: | 10.0.3 |
| Manual section: | 1 |
| Manual group: | developers |
ct-* [compilation args] [filename.cpp] [--variant=<VARIANT>]
compiletools provides C/C++ build automation with minimal configuration. The tools automatically determine source files, dependencies, and build requirements by analyzing your code.
To build a C or C++ project, simply type:
ct-cakeThis automatically determines source files, builds executables, and runs tests. See ct-cake(1) for details.
Try compiletools without installing using uvx:
uvx --from compiletools ct-cake
uvx --from compiletools ct-compilation-databaseThis runs tools directly without affecting your system. All ct-* tools work
with uvx (e.g., uvx --from compiletools ct-config).
uv pip install compiletoolsOr for development:
git clone https://github.com/DrGeoff/compiletools
cd compiletools
uv pip install -e ".[dev]"Two example trees ship with the package:
src/compiletools/examples-end-to-end/— buildable mini-projects exercising the fullct-cake --autopipeline (PCH, C++20 modules, static / dynamic libraries, multi-target apps, sanitizer variants, pkg-config, …). Each has aREADMEdescribing what it demonstrates;cdinto one and runct-caketo see the build flow end-to-end.src/compiletools/examples-features/— focused, fixture-style projects for individual magic-flag annotations and config features (//#PKG-CONFIG=,//#LDFLAGS=,//#PCH=, append-style variables, …). Useful as copy-paste templates when adding the same feature to your own project.
The examples_registry Python module (example_path(),
example_file()) maps these trees from test code; tests under
src/compiletools/test_*.py use them as fixtures, so each example is
also a worked CI-verified configuration.
- Magic Comments
- Embed build requirements directly in source files using special comments
like
//#LDFLAGS=-lpthreador//#PKG-CONFIG=zlib. See ct-magicflags(1). - Automatic Dependency Detection
- Traces #include statements to determine what to compile and link. No manual dependency lists needed.
- Build Variants
- Support for debug, release, and custom build configurations.
Use
--variant=releaseto select. See ct-config(1). - Pluggable Build Backends
- Choose from Make (default), Ninja, CMake, Bazel, or the builtin
Shake backend. Distribute compilation across an HPC cluster with the
Slurm backend. Use
--backend=<name>to select. See ct-backends(7). - Content-Addressable Caching
- Objects, precompiled headers, C++20 module BMIs, and the linker
artefacts themselves (executables, static libs, shared libs) are
cached in per-variant content-addressable directories
(
cas-objdir,cas-pchdir,cas-pcmdir,cas-exedir). Cache keys are anchored to the git root, so identical translation units share entries even when the workspace is moved or cloned to a new path. Combined with the default--use-mtime=False, fresh-checkout CI builds (where every source hasmtime=now) hit the cache instead of re-running the producer. Trim withct-trim-cache. - C++20 Modules
- First-class support for clang
.pcmand gcc.gcmBMI artefacts -- including named modules, partitions, header units, andimport std-- with automatic discovery fromimport/export modulein your sources. See the C++20 Modules Caching section in ct-cake(1). - Precompiled Headers
- Mark headers with
//#PCH=and ct-cake builds them once and shares them across the project viacas-pchdir. - File Locking
- Multi-user/multi-host object file caching with filesystem-aware locking
for faster builds in team environments. Enable with
file-locking = true. - Minimal Configuration
- Works out-of-the-box with sensible defaults. Configuration only needed for customization.
- ct-cake
- Main build tool. Auto-detects targets, builds executables, runs tests.
- ct-compilation-database
- Generate compile_commands.json for IDE integration. Auto-detects targets.
- ct-config
- Inspect configuration resolution and available compilation variants.
- ct-magicflags
- Show magic flags extracted from source files.
- ct-headertree
- Visualize include dependency structure.
- ct-filelist
- Generate file lists for packaging and distribution.
- ct-timing-report
- Analyze build timing data from
ct-cake --timing. Interactive TUI, static summary, run comparison, and Chrome Trace export. - ct-trim-cache
- Trim aged entries from the object, PCH, PCM, and linker-artefact content-addressable caches with configurable retention.
- ct-cache-report
- Summarize content-addressable cache occupancy and flag duplication in the object, PCH, PCM, and linker-artefact caches.
- ct-cas-publish
- Helper invoked from generated build recipes: atomically publish a
cas-exedir entry to a user-facing
bin/<variant>/<name>path vialink()+rename(), withEXDEV-only symlink fallback. Not normally run by hand. - ct-cleanup-locks
- Clean stale locks from file locking.
- ct-check-venv
- Verify that the
ct-cakeon PATH imports the samecompiletoolsas the active venv. Run aftergit worktree addand a freshuv pip install -e .to confirm subprocess-driven tools see the expected source tree. - ct-list-backends
- List available build backends (make, ninja, cmake, bazel, shake).
- Shell Wrappers
- Convenience scripts in
scripts/: ct-build, ct-build-static-library, ct-build-dynamic-library, ct-watch-build, ct-lock-helper, ct-release.
Options are parsed using ConfigArgParse, allowing configuration via command line, environment variables, or config files.
Configuration hierarchy (lowest to highest priority):
- Executable directory (ct/ct.conf.d alongside the ct-* executable)
- System config (/etc/xdg/ct/)
- Python virtual environment (${python-site-packages}/ct/ct.conf.d)
- Package bundled config (<installed-package>/ct.conf.d)
- User config (~/.config/ct/)
- Project config (<gitroot>/ct.conf.d/)
- Git repository root directory
- Current working directory
- Environment variables (capitalized, e.g., VARIANT=release)
- Command-line arguments
Build variants are composed from axis conf files — one per orthogonal
concern: toolchain (gcc, clang), linker (ld, gold, mold,
wild), optimization (debug, release), instrumentation
(asan, ubsan, tsan, coverage, lto).
--variant=gcc,debug,asan (or gcc.debug.asan or gcc debug asan
— comma, dot, and whitespace are all equivalent) synthesizes the
composition from gcc.conf + debug.conf + asan.conf. No per-
combination conf file is required.
Common usage:
ct-cake --variant=gcc,release # toolchain + opt
ct-cake --variant=clang,debug,asan # toolchain + opt + sanitizer
ct-cake --variant=gcc,mold,release,lto # everything composes
ct-cake --append-CXXFLAGS="-march=native"For details on configuration hierarchy, file format, and variant system, see ct-config(1).
This project is derived from the original compiletools developed at Zomojo Pty Ltd (between 2011-2019). Zomojo ceased operations in February 2020. This repository continues the development and maintenance of the compiletools project.
- ct-backends (7) -- build backend architecture and selection guide
- ct-build
- ct-build-docs
- ct-build-dynamic-library
- ct-build-static-library
- ct-cake
- ct-cas-publish
- ct-check-venv
- ct-cleanup-locks
- ct-compilation-database
- ct-config
- ct-cppdeps
- ct-create-makefile
- ct-filelist
- ct-findtargets
- ct-git-sha-report
- ct-gitroot
- ct-headertree
- ct-jobs
- ct-list-backends
- ct-list-variants
- ct-lock-helper
- ct-magicflags
- ct-pytest-monitor
- ct-release
- ct-timing-report
- ct-trim-cache
- ct-watch-build