The Unix utility make
was written to automate the compilation and recompilation of C programs.
For example, it has a builtin rule stating that
an object file depends on the corresponding source file,
and that to remake the object file from the source file,
one must invoke the compiler on the source file.
Then, when asked to make sure that
a given set of object files are up-to-date,
make recompiles exactly those object files
that are out-of-date with respect to their source file.
Make also allows programmers to state additional dependencies in a Makefile.
Despite its usefulness, make has several problems.
These problems together significantly reduce
make's effectiveness in many environments.
Make rules are not transitive.
Given rules that state that file.o depends on file.c
and that file.c depends on file.y,
make cannot figure out that file.o depends on file.y.
Make cannot generate dependencies at run time.
It would be very useful to be able to tell make that
an object file depends not only on the corresponding source file
but also on the header files referred to in the source file,
but one cannot do that.
Make rules can only be based on suffixes.
This prevents the integration of make
with configuration management systems such as RCS
(since make can't be told about RCS/file.c,v),
and it makes it difficult to maintain object files
for two or more systems in the same directory structure
(e.g. one can't store them in sun/file.o and sgi/file.o).
I designed cake as a replacement for make that avoids
all the major problems described above, as well as several minor ones.
Many people have therefore switched from make to cake
and use it as an integral part of their software development environment,
Since cake is so versatile, it can be used for other purposes as well.
For example, some people have used it to maintain VLSI designs,
while others use it to control the production of documents.
Jon Claerbout, a professor of geology at Stanford,
uses cake to control the active aspects
of the interactive book he distributes on CD-ROM.
Cake is portable: it runs on machines from many vendors.
It was distributed throughout the world via Internet news in 1987
and is now available from several anonymous ftp sites.
Due to the nature of these distribution mechanisms,
I do not know how many sites use cake.
I do expect the number to be quite considerable:
all professional programmers need a makelike tool,
and even a very small percentage of the programmers on the Internet
represents a very significant user base.
The sites I do know about include
University of Wisconsin,
University of Illinois,
Digital Equipment Corporation,
as well as several universities in Australia.