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 .
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
- ant
- popular in the Java community
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
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: