Jam
Created on 2024-11-17T09:42:51-06:00
Jam is a built tool created by Perforce, forked for FreeType as FTJam, then forked again by Boost.
It is kind of a weak version of a generation 3 build system; you specify rules and parameters. These then go through a substitution engine which is allowed to perform some switches, loops, and simple recursion.
A "jamfile" is basically for storing the "what" while the "jamrules" are for storing the "how." There is also a stock version of the rules called the "jam base." But you can use a flag to bypass this and use *only* rules you have supplied.
There is also a system that tries to look for include statements in C files to figure out dependencies. This part only works for C but is optional?
The idea is that a file describes the role each source code blob takes (such "just build a console app from these files here") and the rules file translates that for the compiler and OS you are going to use for the job.
Example jamfile
Nim bonk : bonk.nim ; DEPENDS all : bonk ;
Example jam rules
rule Nim {
DEPENDS $(<) : $(>) ;
for piss in $(3) {
DEPENDS $(<) : $(piss) ;
}
Clean clean : $(<) ;
}
actions Nim {
nim c -o:$(<) $(>)
}
rule Clean {
DEPENDS $(<) : $(>) ;
}
actions Clean {
rm -f $(>)
}
include Jamfile ;