make

make is a classic Unix program to automate the building of software and documentation based on the specification of dependencies among files, on general rules for producing one type of file from another, and on specific rules for a particular piece of software or documentation. There are a number of implementations (with some differences), with the probably most widely-used one being GNU make (gmake).

Non-Tcl Alternatives

Boost Build
uses a variant of Perforce's Jam
Cmake
Electric Cloud's emake
by a company founded by JO
OpenOffice Dmake
irregular syntax, but is available for various platforms
Jam
Also FT-Ja , a 100% compatible alternative.
makepp - Make++
a GNU-Make compatible replacement written in Perl
Rake
written in Ruby, provides a domain-specific language intended as an alternative for make
SCons
Python based, powerful but complex
nake
Nake is a simplified version of Make (Cake, Jake, Rake) for the Java 8 Nashorn Javascript Engine.
ant
popular in the Java community
ninja
A small build system designed to have its input files generated by a higher-level build system and to run builds as fast as possible.

Tcl Alternatives

top 3:

bras
smake
tmk

full list:

Rivet's Aardvark
A Little Make Replacement
another make replacement
bras
make library
oommf's pimake
stands for Platform-Independent Make.
smake
aims to be a high-level build system similar to autotools, cmake, qmake, scons, or jam
tabs
tclmake
tcmake - yet another make replacement
tmk
[Should we mention Ant, either on the basis of dwelton's connections, or because of Tcl/Java?] [Only if someone out there is really using Ant with Tcl and has some info online some place regarding the use of the app]
TBuild
A small Tcl extension
dependency-tcl
Silvercat
tmake.tcl
a drop-in replacement for a large and useful subset of 'make'. It compiles makefiles into Tcl scripts and then executes the scripts.
ttask
Primarily for FPGA simulation/implementation. For GCC C/C++ projects, supports automatic dependencies and parallel compile of source files.
FlowTracer
A commercial product for designing and diagramming build processes, and workflow in general. It can analyze and diagram an existing make-based workflow, or it can be used to design workflows via its Tcl-based DSL called "Flow Description Language". It also has a Tk-based GUI for workflow visualization.

http://m.eet.com/media/1097291/rtda_graph.gif

See Also

gnu
MaMa
Mkdepend
PADE
PVM
tmk
UltraMake

Tools

[L1 ]
a debugger for make.
TEA3
leverages make

Reading

Debugging Makefiles , John Graham Cumming, 2007-02-05
valuable tips on coercing Make to introspect.
Regular Expressions: Getting Started with SCons , Miki Tebeka and Cameron Laird, 2005-10
includes a critique of make
make: The Evolution and Alternatives , Andy Oram, 2004-11-18

Description

make scripts describe

targets
files that make should keep up-to-date
dependencies
files that the various targets depend on.
recipes
each recipe is a sequence of actions to take to make a target

Make uses a target's file timestamp and its dependency information to determine when it should be made or re-made.

Traditionally, on Unix, the make command is used to combine pieces of source, transform it into a state suitable for installation, and then actually installing the resulting files into the final destination directories.

Where programs are deployed in source form (as opposed to executables), the issue of how to build either the applications themselves, or the tools needed to build the application becomes a deployment issue. Sometimes you need something simple to bootstrap your application stack, or you rely on a relatively standard tool chain that will let you build your tools. Sometimes that means following a least common denominator notion of tools, often making the assumption about a Unix-like operating system with C compiler.

Tips

override allows += to append to a variable even if it is passed in on the command line:

override CPPFLAGS += -I.