Yet another build system. A C and C++ build system, with projects described using TOML.
To build yabs
you will need rustc
and cargo
. Simply run cargo build
--release
, this will build a binary called yabs
in target/release
.
Output of yabs -h
```
Usage: yabs [OPTION] PROFILE
or: yabs [OPTION]
Run yabs with [OPTION] on PROFILE
Options: -f, --file FILE Use a specified TOML file -h, --help Print help information -m, --make PROFILE Generate Makefile -p, --print Print build file in JSON -b, --build Build profile --print-profile PROFILE Print a particular profile from build file in JSON --profiles Print all available profiles in build file --sources Print source files --version Print version information
Examples: yabs -m linux Generates a Makefile for the build profile 'linux' yabs -p Prints all build profiles
```
yabs
uses TOML to define projects. For example, a project in C++ using libraries such as SDL2, SDL2-image, SDL2-ttf, and Lua 5.3 would look similar to the following:
``toml
[linux.project]
name = "kuma"
target = ["kuma"]
lang = "cpp"
compiler = "g++"
cflags = ["std=c++11"]
inc = [
"src",
"
pkg-config --cflags lua5.3 SDL2image SDL2ttf",
]
libs = [
"
pkg-config --libs lua5.3 SDL2image SDL2ttf`",
]
ignore = [
"tests/",
]
static_lib = false
[staticlib.project] name = "kuma" staticlib = true arflags = "rcs" target = ["libkuma.a"] lang = "cpp" comp = "g++" cflags = ["std=c++11"] inc = ["src", "/usr/include/SDL2",] libs = [ "SDL2", "SDL2image", "SDL2ttf", "lua", ] ignore = [ "src/main.cpp", "tests/", ] ```
Here [linux.project]
defines a toml table, which then defines the project corresponding to the key 'linux'.
yabs
can build a project directly though this does not support multiple jobs. In the prior example two projects were defined: linux
and static_lib
. To build linux
one would simply run yabs -b linux
.
yabs
can also generate Makefiles for projects. This can be done with -m
, using our previous example: yabs -m linux
. This would create a Makefile for our project linux
.
The following tables describes what keys are available to yabs project files.
| Key | Value | Type |
| --- | ----- | ---- |
| name
| Name for project | String |
| target
| Name for target binary | Array |
| lang
| Extension used for source files | String |
| os
| Operating system | String |
| version
| Version number | String |
| compiler
| Compiler to use | String |
| src
| Source files | Array |
| libs
| Libraries to link | Array |
| lib_dir
| Library directories to use | Array |
| inc
| Include directories | Array |
| cflags
| Compiler flags | Array |
| explicit_cflags
| Flags to be written without being altered | Array |
| lflags
| Linker flags | Array |
| ignore
| Directories or files to ignore | Array |
| before_script
| Scripts to run before a build | Array |
| after_script
| Scripts to run after a build | Array |
| static_lib
| Whether the project is a static library | Boolean |
| ar
| Archiving tool to use | String |
| arflags
| Flags for archiving tool | Array |
| clean
| Extra items to clean, these are removed using rm -r
| Array |