Skip to main content

Tools to make compiling C/C++ projects easy

Project description

Build Status

compiletools

C/C++ build tools that requires almost no configuration.

NOTE:

The repository-level README.rst is a symlink to this file, so they are the same canonical document.

Author:

drgeoffathome@gmail.com

Date:

2025-12-17

Version:

8.3.2

Manual section:

1

Manual group:

developers

SYNOPSIS

ct-* [compilation args] [filename.cpp] [–variant=<VARIANT>]

DESCRIPTION

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-cake

This automatically determines source files, builds executables, and runs tests. See ct-cake(1) for details.

QUICK START

Try compiletools without installing using uvx:

uvx --from compiletools ct-cake
uvx --from compiletools ct-compilation-database

This runs tools directly without affecting your system. All ct-* tools work with uvx (e.g., uvx --from compiletools ct-config).

INSTALLATION

uv pip install compiletools

Or for development:

git clone https://github.com/DrGeoff/compiletools
cd compiletools
uv pip install -e ".[dev]"

KEY FEATURES

Magic Comments

Embed build requirements directly in source files using special comments like //#LDFLAGS=-lpthread or //#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=release to select. See ct-config(1).

Pluggable Build Backends

Choose from Make (default), Ninja, CMake, Bazel, Tup, or the builtin Shake backend. Distribute compilation across an HPC cluster with the Slurm backend. Use --backend=<name> to select. See ct-backends(7).

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.

CORE TOOLS

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-cleanup-locks

Clean stale locks from file locking.

ct-list-backends

List available build backends (make, ninja, cmake, bazel, shake, tup).

Shell Wrappers

Convenience scripts in scripts/: ct-build, ct-build-static-library, ct-build-dynamic-library, ct-watch-build, ct-lock-helper, ct-release.

CONFIGURATION

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 (debug, release, etc.) are config profiles specifying compiler and flags. Common variants include blank (default debug), blank.release, gcc.debug, gcc.release, clang.debug, clang.release.

Common usage:

ct-cake --variant=release
ct-cake --append-CXXFLAGS="-march=native"

For details on configuration hierarchy, file format, and variant system, see ct-config(1).

ATTRIBUTION

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.

SEE ALSO

  • 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-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-release

  • ct-timing-report

  • ct-watch-build

Project details


Release history Release notifications | RSS feed

This version

8.3.2

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

compiletools-8.3.2.tar.gz (591.9 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

compiletools-8.3.2-py3-none-any.whl (764.6 kB view details)

Uploaded Python 3

File details

Details for the file compiletools-8.3.2.tar.gz.

File metadata

  • Download URL: compiletools-8.3.2.tar.gz
  • Upload date:
  • Size: 591.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.11.6 {"installer":{"name":"uv","version":"0.11.6","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Fedora Linux","version":"43","id":"","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for compiletools-8.3.2.tar.gz
Algorithm Hash digest
SHA256 ca5ad13fd9bb5ca420acf6b763dbe6a94e2ae795c00b6d79ca85c1393843104e
MD5 8953bb32b0f50137ab17106628f57eb1
BLAKE2b-256 b07509262f064b1295db687b7ee7ed7ff5cf0a273d992f5ebcad6a0bcd8b136b

See more details on using hashes here.

File details

Details for the file compiletools-8.3.2-py3-none-any.whl.

File metadata

  • Download URL: compiletools-8.3.2-py3-none-any.whl
  • Upload date:
  • Size: 764.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.11.6 {"installer":{"name":"uv","version":"0.11.6","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Fedora Linux","version":"43","id":"","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for compiletools-8.3.2-py3-none-any.whl
Algorithm Hash digest
SHA256 9ccbac6b3fb2cb7e63c8b2b0f7784c117647b3349fec4abdb65fa622a7d0c07e
MD5 986648b43644164fd8da0fe908ddc0e6
BLAKE2b-256 c66ad6aad93d6f42d27923fd1fbc38eeb31700a57bd6af141b42602fd5d4131c

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page