Skip to main content

Simple JSON-based CLI build tool for C!!!

Project description

r3make

PyPi Package version

r3make is a minimal, fast, and readable JSON-based build tool for C projects. It handles basic compilation and linking tasks with zero setup complexity, making it ideal for small-to-medium codebases that don't need the overhead of tools like CMake.


Features

  • Straightforward JSON Config – All build logic lives in a clean, intuitive JSON file.
  • Multi-Target Support – Define any number of build targets in a single file.
  • Flexible Output – Supports building executables, shared libraries, and static libraries.
  • Cross-Compiler – Works with GCC, Clang, Emscripten, and MSVC.
  • Cross-Platform (Work in Progress) – Windows is fully supported, with Linux and macOS planned.
  • Optional --run Flag – Automatically run the built executable target after compilation.

Why r3make?

Makefile and CMake are powerful but overly complex for many use cases. r3make gives you:

  • A single clean JSON file.
  • No scripts or Makefile DSL.
  • Easier cross-compilation setup.
  • Simpler onboarding for contributors.

Getting Started

1. Create a r3make.json file in your project root

A minimal example utilizing all config fields:

{
    "MyApp": {
        "defines": ["MYAPP_BUILD"],
        "flags": ["-Wall", "-Werror", "-std=c99"],

        "includes": ["include"],
        "sources": ["src/*.c"],
        
        "libraries": {"gdi32": null, "SSDK": null},
        "gitdeps": ["r3shape/SSDK"],

        "name": "App",
        "type": "exe",
        "dest": "bin"
    }
}

Building a Project

Run this from the directory containing r3make.json:

r3make --target MyApp

To run an executable immediately after building:

r3make --target MyApp --run

| NOTE:
| If the name field is not present in a r3make target, the target name is used.
| r3make configuration files may have a target named "main", this is the default target when calling r3make with no --target flag.


Fetching Remote Libraries

Consider the following program:

#include <include/SSDK/SSDK.h>

int main() {
    ssdkInitLog();
    saneLog->log(SANE_LOG_DUMP, "Hello, World!");
    ssdkExitLog();
    return 0;
}

The above code is using the SSDK library, but we have not installed SSDK ourselves. We can let r3make take care of installation, updates, and linking with SSDK via our configuration:

{
    "main": {
        "sources": ["main.c"],
        
        "libraries": {"SSDK": null},
        "gitdeps": ["r3shape/SSDK"],
        
        "name": "app",
        "type": "exe",
        "dest": "build"
    }
}

With the above configuration, we can use the following command to build, link, and run app.exe:

r3make -r

You should see a log similar to [INFO] Added library 'SSDK' from r3shape/SSDK in the stream of output from r3make, verifying the successful clone/update, and build of the remote dep.

| NOTE:
| A [WARNING] log might appear when utilizing the gitdeps field, as an elevated shell is required for OS-default path manipulation, which is where remote deps are installed to.


Target Configuration Fields

Field Required Description
sources Yes List of glob patterns or file paths to .c files.
type Yes exe, dll, or lib (shared/static libraries).
dest Yes Output directory for built files.
name No The name of the output artifact.
flags No Additional compiler flags.
defines No List of preprocessor defines.
gitdeps No List of remote linked libraries.
includes No List of include directories.
libraries No Linked libraries, optionally with paths.

CLI Flags

Short Flag Long Flag Description
-t --target Name of the target to build (e.g., -t MyApp). Required unless defaulting.
-v --verbose Enables verbose output (shows full commands and file list).
-f --file Path to the r3make.json config file (defaults to r3make.json in current dir).
-nf --nofiles Disables file discovery; skips glob expansion (useful for debugging).
-be --buildeach Forces compilation of all sources individually, even if a library.
-r --run Runs the target after a successful build (only works for exe targets).

Installation

Install via pip:

pip install r3make

Roadmap

  • Incremental builds (skip unchanged files).
  • Parallel compilation.
  • Better error messages and diagnostics.
  • Linux/macOS support.
  • [✔️] Remote dependency fetching (gitdeps config field).

Contributing

Issues and pull requests are welcome! If you find a bug, want to suggest a feature, or improve documentation, visit github.com/r3shape/r3make.


License

MIT License. See LICENSE.

Project details


Download files

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

Source Distribution

r3make-2025.2.3.tar.gz (10.8 kB view details)

Uploaded Source

Built Distribution

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

r3make-2025.2.3-py3-none-any.whl (10.1 kB view details)

Uploaded Python 3

File details

Details for the file r3make-2025.2.3.tar.gz.

File metadata

  • Download URL: r3make-2025.2.3.tar.gz
  • Upload date:
  • Size: 10.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.1

File hashes

Hashes for r3make-2025.2.3.tar.gz
Algorithm Hash digest
SHA256 9cf4c7b50e9093d2ab3035d6679e065f3db8974a0b293920cdd72985cd4bcd7e
MD5 556d20e3f8cd127a468b3f895554ac29
BLAKE2b-256 f7a256f70ad5e0f2d573fcfa335ab3ce89b7c7c150a7f2e6ad111c9d4617573a

See more details on using hashes here.

File details

Details for the file r3make-2025.2.3-py3-none-any.whl.

File metadata

  • Download URL: r3make-2025.2.3-py3-none-any.whl
  • Upload date:
  • Size: 10.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.1

File hashes

Hashes for r3make-2025.2.3-py3-none-any.whl
Algorithm Hash digest
SHA256 d8629603736f73afe53e9e6791325e3219a0c0cfabf343923506eb584c3aab5c
MD5 15bf6fe4ced37a2128fc6a14904e0b90
BLAKE2b-256 bca1728da07023e3cd8b825a14715bbec4a9ee0172063e3137d98ce9d3ec2cae

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