This is a public domain implementation of make which follows the POSIX standard.
If you've got here I assume you know what make is and why you might want to use it. If not, Chris Wellons has a nice Tutorial on Portable Makefiles.
Many Linux systems have the POSIX make specification available as a man page. It can be read with:
man 1p make(On Debian-based systems you may need to install the
The code is based on Neil Russell's public domain make, as submitted to the Usenet newsgroups net.sources and mod.sources in 1986. The basic data structures and algorithms remain but everything else has changed. This version is also dedicated to the public domain.
The problem with make is that it's a tool for developers, and developers like to tinker with their tools. There are therefore many slightly different versions of make around. POSIX attempts to standardise their common behaviour but leaves a lot of the details unspecified or implementation dependent. It's also rather lax, in that it allows extensions to exist provided they don't interfere with the specified functionality.
This version tries to stick to the POSIX standard. Although the default build from source includes a number of extensions a key feature of the program is that all of these can be turned off at runtime.
This can be achieved in several ways:
.POSIXas the first non-comment line of the first makefile to be processed.
--posixcommand line option. This must be the first given on the command line.
PDPMAKE_POSIXLY_CORRECTenvironment variable. If this is set to any value (even an empty string) extensions are disabled.
Extensions from a future POSIX standard have been added. Note that these are subject to change until the standard is finally published.
-j maxjobscommand line option is accepted but doesn't cause jobs to be run in parallel, as is permitted by the proposed standard.
.PHONYspecial target are always treated as being out-of-date.
include. This can be handy when using the automatic dependency tracking feature of compilers.
makerather than the "delayed remaking" used by GNU
$^internal macro evaluates to all prerequisites of the current target (not just out-of-date ones, as with
MAKEenvironment variable is provided the
MAKEmacro is initialised from
argv, with a relative path converted to absolute.
SRC = src/util.c src/main.c OBJ = $(SRC:src/%.c=obj/%.o)
Some additional extensions are also provided. These are all compatible
make, though some are supported by other
-C directorycommand line option changes the current working directory.
.q.rand the file
thing.pexists, make is able to deduce how to create
can be used in the targets and prerequisites of target rules.
Future POSIX and non-POSIX extensions can be enabled separately by
setting the build flags
The most recent source tarball is pdpmake-1.3.0.tgz. The release notes describe recent changes.
Source is also available in a Git repository mirrored on GitHub, Gitlab and with (IPv6 only):
git clone git://git.frippery.org/pdpmake
Bug reports can be submitted via GitHub, GitLab or by email to the address below.
Remember, though, this is just a bunch of zeroes and ones you happened to find on the internet. If it does anything useful that's an unexpected bonus.