caxe 0.3.3

A modern C/C++ project manager that cuts through build system complexity. Zero config, smart dependencies, and parallel builds.
caxe-0.3.3 is not a library.

caxe (cx) ๐Ÿช“

CI GitHub release (latest by date) GitHub all releases Crates.io

caxe (pronounced "c-axe") is a modern project manager for C and C++ designed to cut through the complexity of legacy build systems.

It provides a unified workflow for scaffolding, building, testing, formatting, and managing dependenciesโ€”giving C/C++ developers the modern experience they deserve.

Zero Configuration. Lightning Fast. Batteries Included.

โœจ Features

  • โšก Zero Config Start: Create a Hello World C/C++ project in seconds.
  • ๐Ÿ”ง Automatic Toolchain Discovery: Detects MSVC, Clang-CL, Clang++, and GCC without relying on PATH. Uses vswhere on Windows.
  • ๐Ÿ“ฆ Smart Dependency Management:
    • Git Libraries: Auto-download from GitHub. Supports Pinning (Tag/Branch/Commit) for stability.
    • System Packages: Native support for pkg-config (e.g., GTK, OpenSSL).
    • Vendor Mode: cx vendor to copy dependencies locally for offline builds.
  • ๐Ÿš€ High-Performance Builds:
    • Lock-free Parallel Compilation: Utilizes all CPU cores.
    • Caching: CCache integration, incremental builds, and PCH support.
    • LTO: Link Time Optimization for release builds.
  • ๐Ÿงช Smart Testing:
    • Auto-links project sources for unit testing internals.
    • Test filtering (--filter) and binary caching.
  • ๐Ÿ“Š Insights: cx stats for code metrics and cx tree for dependency graphs.
  • ๐ŸŒ WebAssembly: cx build --wasm (via Emscripten) support out of the box.
  • ๐Ÿ›ก๏ธ Safety: cx build --sanitize for Address/Undefined Behavior sanitizers.
  • ๐ŸŽจ Code Formatting: Built-in cx fmt command (via clang-format).
  • ๐Ÿค– Automation: Generators for Docker, GitHub Actions, and VSCode configs.

๐Ÿ“ฆ Installation

Automatic Script (Recommended)

Windows (PowerShell):

iwr https://raw.githubusercontent.com/dhimasardinata/caxe/main/install.ps1 -useb | iex

Unix (Linux/macOS):

curl -fsSL https://raw.githubusercontent.com/dhimasardinata/caxe/main/install.sh | sh

Option 2: Install via Cargo

cargo install caxe

๐Ÿš€ Quick Start

Interactive Mode

Simply run cx or cx new without given name to start the wizard.

cx new

# ? What is your project name? โ€บ my-app

# ? Select a template: โ€บ console

# ? Select language: โ€บ cpp

CLI Arguments Mode

# Default (Hello World)

cx new my-game --lang cpp


# Web Server (cpp-httplib)

cx new my-server --template web


# Raylib Game Config

cx new my-game --template raylib


๐Ÿ“– CLI Reference

Project Management

  • cx new <name>: Create a new project.
  • cx init: Initialize cx.toml in an existing directory (imports CMake/Makefile projects!).
  • cx info: Show system, cache, and toolchain info.
  • cx doctor: Diagnose system issues (missing tools, compilers).
  • cx stats: Show project code metrics (LOC, files).

Build & Run

  • cx run: Build and run the project.
  • cx build: Compile only.
    • --release: Optimize for speed (-O3 / /O2).
    • --wasm: Compile to WebAssembly (requires Emscripten).
    • --lto: Enable Link Time Optimization.
    • --sanitize=<check>: Enable runtime sanitizers (e.g., address, undefined).
    • --profile: Trace build times (generate chrome tracing .json).
  • cx watch: Rebuild on file save.
  • cx clean: Remove build artifacts.

Dependencies

  • cx add <lib>: Add a library from registry or Git URL.
  • cx remove <lib>: Remove a dependency.
  • cx update: Update dependencies to latest versions.
  • cx vendor: Copy all dependencies into vendor/ for commit/offline use.
  • cx tree: Visualize the dependency graph.

Testing & Quality

  • cx test: Run unit tests in tests/.
    • --filter <name>: Run specific tests.
  • cx fmt: Format code with clang-format.
  • cx check: Static analysis (clang-tidy/cppcheck).

Ecosystem

  • cx docker: Generate a Dockerfile.
  • cx ci: Generate a GitHub Actions workflow.
  • cx setup-ide: Generate VSCode configuration (.vscode/).

โš™๏ธ Configuration (cx.toml)

[package]

name = "my-awesome-app"

version = "0.1.0"

edition = "c++20"



[build]

bin = "app" # Output: app.exe

compiler = "clang"  # Options: msvc, clang, clang-cl, g++

cflags = ["-O2", "-Wall", "-Wextra"]

libs = ["pthread", "m"]

pch = "src/pch.hpp" # Precompiled Header (Optional)



[dependencies]

# 1. Simple Git (HEAD)

fmt = "https://github.com/fmtlib/fmt.git"



# 2. Pinned Version (Recommended for production)

json = { git = "https://github.com/nlohmann/json.git", tag = "v3.11.2" }



# 3. System Dependency (pkg-config)

gtk4 = { pkg = "gtk4" }

๐Ÿ“ License

MIT