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.
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: