NoMake is a build system that supports multiple programming languages, static type checking, intellisense and distributed building.
- Documentation
- Installation: download the latest release from GitHub Releases
- Examples:
- NoMake Starter: NoMake Release built by NoMake itself
- CToolchain: C/C++ example using Zig/GCC
- C# Native AOT: C# cross-platform native compilation using Bflat (no .NET SDK and Visual Studio)
- Git Repository Archive: Target-based Git repo clone
- HTTP Archive: Target-based HTTP archive
Download and unzip binaries into your PATH.
For Unix-like systems, you might use chmod +x nomake deno to make them
executable.
Then your create a build.ts file in your project root:
/* filename: build.ts */
import * as NM from "https://github.com/thautwarm/nomake/raw/v0.1.12/mod.ts";
// define options
NM.option("legacy", ({ value }) => {/* do stuff with value */});
// parse options
NM.parseOptions();
// define one or more targets
NM.target(
{
name: "output.txt",
deps: { file: "input.txt" },
async build({ deps, target })
{
const input = await new NM.Path(deps.file).readText();
await new NM.Path(target).writeText(
"Hello, " + input,
);
},
},
);
NM.target(
{
name: "build",
deps: ["output.txt"],
// the top-level virtual target should be always rebuilt
rebuild: "always",
},
);
// trigger the build process
await NM.makefile();If you create a input.txt file in the same directory, you can run
nomake output.txt in the terminal to build output.txt.
Running nomake build, the file output.txt will be rebuilt only if you change
input.txt again.
You could invoke the command nomake help to show available targets and
options.
NoMake is licensed under the MIT License. See LICENSE for more information.