A simple to use JSON based C++ build system for Linux wihout the headaches of cmake.
Find a file
2025-11-01 11:53:09 +01:00
implementations deadlock fix 2025-11-01 11:53:09 +01:00
interfaces test fixes 2025-11-01 06:50:41 +01:00
lib rewrite 2025-10-31 16:50:47 +01:00
tests/ShouldCompile rewrite 2025-10-31 16:50:47 +01:00
.gitignore remove accidently commited files 2025-11-01 06:52:24 +01:00
build.sh test fixes 2025-11-01 06:50:41 +01:00
LICENSE multithreaded module compilation 2024-12-31 20:32:00 +01:00
project.json test fixes 2025-11-01 06:50:41 +01:00
README.md rewrite 2025-10-31 16:50:47 +01:00

About

This is a simple and easy to use C++ build system for Linux designed for use with C++20 modules in mind, it uses JSON based project files.

Install

Prerequisites:

lld
clang
git
lldb
onetbb
glslang

Build from source

git clone https://github.com/Catcrafts/Crafter.Build.git
cd Crafter.Build
./build.sh

(optionally add to path)

How to use

Quickstart

create a project.json in an empty folder, open it in your preferred text editor. Create a basic project file, with a base configuration and debug and release configuration

{
    "name": "hello-world",
    "configurations": [
        {
            "name": "base",
            "standard": "c++26",
            "source_files": ["main"],
            "module_files": [],
            "build_dir": "./build",
            "output_dir": "./bin"
        },
        {
            "name": "debug",
            "extends": ["base"],
            "optimization_level": "0"
        }
        {
            "name": "release",
            "extends": ["base"],
            "optimization_level": "3"
        }
    ]
}

Save and close the file, create a main.cpp

#include <print>
int main() {
  std::println("Hello World!");
}

Save and close, then run crafter-build -c debug. Now you can run the hello-world executable that has appeared in the bin folder

CLI arguments

--help Displays a help message.

-c The name of the configuration to build.

-p The path to the project file, defaults to project.json.

-o Overrides the output folder.

-r Runs the executable after building.

configuration properties

name Name of the configuration.

standard C++ standard that this configuration uses, please refer to the relevant clang documentation, defaults to c++26.

source_files All source files of the project .cpp extension is assumed.

module_files All C++ 20 module files of the project .cppm extension is assumed.

additional_files Files that will be copied to the output_dir.

build_dir The directory where intermediate files are stored.

output_dir The directory where the output files will be placed.

type The type of the project: executable, library, shared-library, defaults to executable.

extends An array of configuration names that this configuration extends, later elements in the array take priority over previous ones.

optimization_level Please refer to the relevant clang documentation, defaults to 0.

dependencies An object array of the dependencies of this project, example:

"dependencies": [
    {
        "path":"/home/Crafter.Build/project.json",
        "configuration":"debug-lib",
        "commit":"af7eb61c3d92ab18f6aa6c139ac7211a908a24ee"
    }
    {
        "path":"https://github.com/Catcrafts/Crafter.Build.git",
        "configuration":"debug-lib",
        "branch":"master"
    }
]

This will now link the library of Crafter.Build in the configuration you use this in. commit and branch are optional parameters, if omitted the latest commit on the default branch is used.

target Clang triplet this configuration uses, please refer to the relevant clang documentation.

Note: the WASI SDK needs to be installed to compile to webassmbly, and $WASI_SDK_PATH needs to be set, please refer to the wasi-sdk installation guide.