Make: A Build Automation Tool

In software development, Make is a build automation tool that automatically builds executable programs and libraries from source code by reading files called Makefiles which specify how to derive the target program. Though integrated development environments and language-specific compiler features can also be used to manage a build process, Make remains widely used, especially in Unix and Unix-like operating systems.

Besides building programs, Make can be used to manage any project where some files must be updated automatically from others whenever the others change.

GNU Make

GNU Make is a tool which controls the generation of executables and other non-source files of a program from the program’s source files.

Make gets its knowledge of how to build your program from a file called the makefile, which lists each of the non-source files and how to compute it from other files. When you write a program, you should write a makefile for it, so that it is possible to use Make to build and install the program.

Print the data base (rules and variable values) via command make -pq:

# GNU Make 3.81
# Copyright (C) 2006  Free Software Foundation, Inc.
# This is free software; see the source for copying conditions.
# There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A
# PARTICULAR PURPOSE.

# This program built for x86_64-redhat-linux-gnu

# Make data base, printed on Thu Mar 21 11:20:45 2013

# Variables

# environment
NPX_PLUGIN_PATH = /opt/jdk_1.6.0-17/jre/plugin/platform/ns7
# environment
LSF_HOME = /opt/lsf_7.0.6
# automatic
?F = $(notdir $?)
# automatic
<D = $(patsubst %/,%,$(dir $<))
# environment
LSF_EAUTH_SERVER = mbatchd@dg01
# environment
XTENSAD_LICENSE_FILE = /opt/lic/share/license/site/cadadm/tensilica/tensilica_lic:/opt/lic/share/license/site/cadadm/tensilica/tensilica_iind_lic:/opt/lic/share/license/site/lmadmin/tensilica/tensilica_umg_lic:/opt/lic/share/license/site/lmadmin/tensilica/tensilica_vlb_lic
# environment
CNLSF_BATCH_PATH = /vobs/tools/urania/batch:/home/comneon/share/cnlsf-templates:.
# environment
LSB_JOBFILENAME = /home/cweixiax/.lsbatch/1363856608.1004425
# environment
MODULEPATH = /opt/site/modulefiles/local:/opt/modulefiles/admin:/opt/modulefiles/dbs:/opt/modulefiles/eda:/opt/modulefiles/misc:/opt/modulefiles/office:/opt/modulefiles/prog:/opt/modulefiles/win:/opt/modulefiles/unix:/opt/modulefiles/docu:/home/comneon/etc/modules:/opt/xtensa-modules/modules
# default
CWEAVE = cweave
# environment
LSB_BATCH_JID = 1004425
# automatic
?D = $(patsubst %/,%,$(dir $?))
# environment
ECLIPSE_HOME = /opt/eclipse_3.7.1
# environment
GTK_RC_FILES = /etc/gtk/gtkrc:/home/cweixiax/.gtkrc-1.2-gnome2
# environment
DESKTOP_STARTUP_ID = 
# environment
IFX_LSF_HOME = /home/cweixiax
# automatic
@F = $(notdir $@)
# environment
XMODIFIERS = @im=none
# default
PC = pc
# makefile
CURDIR := /home/cweixiax
# makefile
SHELL = /bin/sh
# default
RM = rm -f
# environment
NX_ROOT = /home/cweixiax/.nx
# environment
LSB_NTRIES = 5
# environment
CLEARCASE_CMDLINE = setview -exec sview_backend cweixiax_130225_sms03421960.av1.dv
# default
PREPROCESS.F = $(FC) $(FFLAGS) $(CPPFLAGS) $(TARGET_ARCH) -F
# environment
LSB_CHKFILENAME = /home/cweixiax/.lsbatch/1363856608.1004425
# default
LINK.o = $(CC) $(LDFLAGS) $(TARGET_ARCH)
# default
OUTPUT_OPTION = -o $@
# environment
LSF_SERVERDIR = /opt/lsf_7.0.6/etc
# default
COMPILE.cpp = $(COMPILE.cc)
# environment
LSF_LOGDIR = /var/lsf/log
# automatic
@D = $(patsubst %/,%,$(dir $@))
# default
LINK.p = $(PC) $(PFLAGS) $(CPPFLAGS) $(LDFLAGS) $(TARGET_ARCH)
# automatic
*D = $(patsubst %/,%,$(dir $*))
# environment
LSB_QUEUE = interactive
# environment
DBUS_SESSION_BUS_ADDRESS = unix:abstract=/tmp/dbus-sn4RJpCx8G,guid=23840ec2158158a75e9b4000514accc5
# environment
LS_JOBPID = 5540
# default
CC = cc
# environment
workAlgorithms = /vobs/lte_ip_algorithms
# environment
MACHTYPE = x86_64
# environment
_MODULESBEGINENV_ = /home/cweixiax/.modulesbeginenv
# environment
INFOPATH = /opt/TWWfsw/info
# environment
LSF_EAUTH_AUX_PASS = yes
# default
CHECKOUT,v = +$(if $(wildcard $@),,$(CO) $(COFLAGS) $< $@)
# environment
GNOME_KEYRING_SOCKET = /usr/tmp/keyring-P6annr/socket
# environment
LESSOPEN = |/usr/bin/lesspipe.sh %s
# environment
LSB_DJOB_NUMPROC = 1
# default
CPP = $(CC) -E
# environment
SSH_CONNECTION = 127.0.0.1 41950 127.0.0.1 22
# default
LINK.cc = $(CXX) $(CXXFLAGS) $(CPPFLAGS) $(LDFLAGS) $(TARGET_ARCH)
# environment
LSB_EEXEC_REAL_GID = 
# default
COMPILE.S = $(CC) $(ASFLAGS) $(CPPFLAGS) $(TARGET_MACH) -c
# environment
NXDIR = /usr/NX
# environment
LSB_ECHKPNT_RSH_CMD = ssh
# environment
PATH = /opt/bullseye_8.7.4/bin:/opt/jdk_1.6.0-17/bin:/opt/jdk_1.6.0-17/jre/bin:/vobs/lte_ip_tools/bin:/opt/perl_5.8.8/bin:/opt/xtensa-tools_9.0.5/RD-2012.5-linux/XtensaTools/bin:/opt/eclipse_3.7.1/bin:/usr/atria/bin:/opt/cups-1.1.20/bin:/opt/lsf_7.0.6/bin:/usr/lib64/qt-3.3/bin:/usr/NX/bin:/usr/kerberos/bin:/bin:/usr/bin::.:/home/cweixiax/bin:/usr/ucb:/home/comneon/bin:/opt/TWWfsw/bin:/usr/local/bin
# environment
COMNEON_SHELL = tcsh
# default
TEXI2DVI = texi2dvi
# default
COMPILE.c = $(CC) $(CFLAGS) $(CPPFLAGS) $(TARGET_ARCH) -c
# default
YACC = yacc
# environment
SESSION_MANAGER = 
# environment
IFX_CDSFRB_LSF_PATH = /opt/lsf_7.0.6/exec/cdsfrb_lsf7.0
# default
COMPILE.mod = $(M2C) $(M2FLAGS) $(MODFLAGS) $(TARGET_ARCH)
# default
ARFLAGS = rv
# default
LINK.C = $(LINK.cc)
# default
LINK.r = $(FC) $(FFLAGS) $(RFLAGS) $(LDFLAGS) $(TARGET_ARCH)
# environment
VENDOR = unknown
# environment
WINDOWID = 39845967
# environment
OSTYPE = linux
# default
COMPILE.f = $(FC) $(FFLAGS) $(TARGET_ARCH) -c
# makefile
MAKEFILE_LIST := 
# default
LINT.c = $(LINT) $(LINTFLAGS) $(CPPFLAGS) $(TARGET_ARCH)
# default
LINT = lint
# environment
LPATH = 
# environment
LSB_DJOB_HB_INTERVAL = 10
# environment
LSB_HOSTS = dgsxhw01
# default
YACC.y = $(YACC) $(YFLAGS)
# environment
CLEARCASE_ROOT = /view/cweixiax_130225_sms03421960.av1.dv
# environment
LSB_EEXEC_REAL_UID = 
# environment
LSB_SUB_HOST = dgsxlognx02
# environment
LSF_ENVDIR = /opt/lsf_7.0.6/share/conf/envdir/dg01
# environment
BULLS_ROOT = /opt/bullseye_8.7.4
# default
.FEATURES := target-specific order-only second-expansion else-if archives jobserver check-symlink
# environment
LSB_EXIT_PRE_ABORT = 99
# environment
COMNEON_SVIEW = cweixiax_130225_sms03421960.av1.dv
# environment
LS_COLORS = no=00:fi=00:di=00;34:ln=00;36:pi=40;33:so=00;35:bd=40;33;01:cd=40;33;01:or=01;05;37;41:mi=01;05;37;41:ex=00;32:*.cmd=00;32:*.exe=00;32:*.com=00;32:*.btm=00;32:*.bat=00;32:*.sh=00;32:*.csh=00;32:*.tar=00;31:*.tgz=00;31:*.arj=00;31:*.taz=00;31:*.lzh=00;31:*.zip=00;31:*.z=00;31:*.Z=00;31:*.gz=00;31:*.bz2=00;31:*.bz=00;31:*.tz=00;31:*.rpm=00;31:*.cpio=00;31:*.jpg=00;35:*.gif=00;35:*.bmp=00;35:*.xbm=00;35:*.xpm=00;35:*.png=00;35:*.tif=00;35:
# environment
XAPPLRESDIR = /opt/TWWfsw/app-defaults
# environment
SSH_AUTH_SOCK = /tmp/ssh-puaVzZ7508/agent.7508
# environment
LSB_USER_BIND_JOB = NONE
# default
GET = get
# automatic
%F = $(notdir $%)
# environment
XTENSA_RELEASE = RD-2012.5
# environment
LM_PROJECT = IMC
# environment
DISPLAY = dgsxlognx02:1053.0
# default
COMPILE.F = $(FC) $(FFLAGS) $(CPPFLAGS) $(TARGET_ARCH) -c
# default
CTANGLE = ctangle
# default
.LIBPATTERNS = lib%.so lib%.a
# environment
CNGRID_BATCH_PATH = /vobs/tools/urania/batch:/home/comneon/share/cngrid-templates:.
# environment
PWD = /home/cweixiax
# environment
LSB_JOBID = 1004425
# environment
NX_SYSTEM = /usr/NX
# environment
LSB_JOB_EXECUSER = cweixiax
# environment
INPUTRC = /etc/inputrc
# default
LINK.S = $(CC) $(ASFLAGS) $(CPPFLAGS) $(LDFLAGS) $(TARGET_MACH)
# default
PREPROCESS.r = $(FC) $(FFLAGS) $(RFLAGS) $(TARGET_ARCH) -F
# environment
SSH_AGENT_PID = 7561
# default
LINK.c = $(CC) $(CFLAGS) $(CPPFLAGS) $(LDFLAGS) $(TARGET_ARCH)
# automatic
<F = $(notdir $<)
# environment
workAlgorithmsSw = /vobs/lte_ip_algorithms/lteSw
# environment
LSF_LIBDIR = /opt/lsf_7.0.6/lib
# environment
G_BROKEN_FILENAMES = 1
# environment
LSB_JOBRES_CALLBACK = 38145@dgsxhw01
# environment
CUPS_DATADIR = /opt/cups-1.1.20/share/cups
# environment
MANPATH = /opt/jdk_1.6.0-17/man:/opt/perl_5.8.8/man:/opt/cups-1.1.20/man:/opt/lsf_7.0.6/share/man:/usr/share/man:/opt/Modules/man:/usr/man:/usr/atria/doc/man:/opt/TWWfsw/man:/home/swmdev/opticm/man:/usr/local/man
# default
LINK.s = $(CC) $(ASFLAGS) $(LDFLAGS) $(TARGET_MACH)
# environment
HOME = /home/cweixiax
# environment
LSB_EXEC_CLUSTER = dg01
# environment
LD_LIBRARY_PATH = /opt/gcc_4.1.2/linux40_64/lib64:/vobs/lte_ip_tools/lib:/vobs/msw_fw_4g_src/fw/bwcCommon/mk/srec/lib:/opt/xtensa-tools_9.0.5/RD-2012.5-linux/XtensaTools/lib:/opt/lsf_7.0.6/lib
# environment
CUPS_DOCROOT = /opt/cups-1.1.20/share/doc/cups
# environment
LSB_MCPU_HOSTS = dgsxhw01 1 
# environment
CUPS_ROOT = /opt/cups-1.1.20
# environment
NX_CUPS_BIN = /usr/bin
# environment
MODULESHOME = /opt/Modules
# environment
LOGNAME = cweixiax
# default
LD = ld
# environment
LSF_INVOKE_CMD = bsub
# environment
TEXINPUTS = /opt/TeX/share/texmf.local/tex//:
# default
CO = co
# environment
GNOME_DESKTOP_SESSION_ID = Default
# automatic
^D = $(patsubst %/,%,$(dir $^))
# environment
HOSTNAME = dgsxhw01
# environment
MAKELEVEL := 0
# environment
MODULE_VERSION_STACK = 3.1.6
# environment
SSH_ASKPASS = /usr/libexec/openssh/gnome-ssh-askpass
# environment
MOZILLA_FIVE_HOME = /opt/firefox_2.0/lib/firefox-2.0.0.17
# environment
LSB_ACCT_FILE = /tmp2/.1363856608.1004425.acct
# environment
LSB_INTERACTIVE = Y
# environment
LSF_EAUTH_CLIENT = user
# environment
CUPS_SERVER = cupsprt1
# environment
workSoftware = /vobs/msw_fw_4g_src/fw
# environment
SHLVL = 9
# environment
LSFUSER = cweixiax
# environment
LS_SUBCWD = /home/cweixiax/
# environment
BSUB_STDERR = y
# default
AS = as
# default
PREPROCESS.S = $(CC) -E $(CPPFLAGS)
# environment
workIpXact = /vobs/lte_ip_ipxact
# environment
JAVA_HOME = /opt/jdk_1.6.0-17
# default
COMPILE.p = $(PC) $(PFLAGS) $(CPPFLAGS) $(TARGET_ARCH) -c
# default
MAKE_VERSION := 3.81
# environment
USER = cweixiax
# default
FC = f77
# environment
COMNEON_PROMPT_STR = [CN-ENV]
# environment
CCASE_AUDIT_TMPDIR = /tmp2
# environment
LSB_DJOB_RU_INTERVAL = 10
# environment
LSF_LIM_API_NTRIES = 1
# environment
CLASSPATH = .
# default
MAKE = $(MAKE_COMMAND)
# environment
CMN_MODULEP_X = yes
# automatic
%D = $(patsubst %/,%,$(dir $%))
# environment
COMNEON_PROMPT_STYLE = normal
# environment
SSH_ORIGINAL_COMMAND = /usr/NX/bin/nxnode
# environment
LS_EXEC_T = START
# default
AR = ar
# default
WEAVE = weave
# default
MAKE_COMMAND := make
# default
LINK.cpp = $(LINK.cc)
# default
F77 = $(FC)
# default
COMPILE.cc = $(CXX) $(CXXFLAGS) $(CPPFLAGS) $(TARGET_ARCH) -c
# environment
MAGIC_PATH = /opt/cc_scripts/comneon/release/cm_tools/user/settings/cc:/opt/rational/clearcase/config/magic
# environment
BSUB_BLOCK_EXEC_HOST = 
# default
.VARIABLES := 
# environment
TMPDIR = /tmp2
# environment
QTLIB = /usr/lib64/qt-3.3/lib
# automatic
*F = $(notdir $*)
# environment
XTENSA_SYSTEM = /opt/xtensa-modules/XtDevShared/XtensaRegistry/RD-2012.5-linux
# environment
SBD_KRB5CCNAME_VAL = 
# default
LEX = lex
# makefile
MAKEFLAGS = qp
# environment
MFLAGS = -qp
# environment
SSH_CLIENT = 127.0.0.1 41950 22
# environment
MAIL = /var/spool/mail/cweixiax
# environment
LOADEDMODULES = generic:sysv:lsf/current:cups/1.1.20:comneon/current:clearcase/local:freeware/9.0:X11/R6:opticm/current:eclipse/3.7.1:xtensa/tools/9.0.5:perl/5.8.8:FW4GBuildEnv/1.0:jdk/1.6.0-17:bullseye/root/8.7.42:bullseye/8.7.42
# default
LEX.l = $(LEX) $(LFLAGS) -t
# environment
LSF_BINDIR = /opt/lsf_7.0.6/bin
# automatic
+D = $(patsubst %/,%,$(dir $+))
# environment
KDEDIR = /usr
# default
COMPILE.r = $(FC) $(FFLAGS) $(RFLAGS) $(TARGET_ARCH) -c
# automatic
+F = $(notdir $+)
# default
M2C = m2c
# environment
LSF_CREATED_TMPDIR = no
# environment
NX_TEMP = /tmp
# environment
LSB_UNIXGROUP_INT = comneong
# environment
LSB_DJOB_HOSTFILE = /home/cweixiax/.lsbatch/1363856608.1004425.hostfile
# environment
CLEARCASE_AVOBS = /vobs/msw_fw_4g_src /vobs/dwdtools /vobs/umts_fw_dev /vobs/tools /vobs/system-build /vobs/lte_ip_algorithms /vobs/mhw_drv_src /vobs/msw_tools
# environment
COLORTERM = gnome-terminal
# default
MAKEFILES := 
# environment
XLSF_UIDDIR = /opt/lsf_7.0.6/lib/uid
# environment
_LMFILES_ = /opt/modulefiles/unix/generic:/opt/modulefiles/unix/sysv:/opt/site/modulefiles/local/lsf/current:/opt/modulefiles/misc/cups/1.1.20:/home/comneon/etc/modules/comneon/current:/opt/modulefiles/prog/clearcase/local:/opt/modulefiles/misc/freeware/9.0:/opt/modulefiles/win/X11/R6:/home/comneon/etc/modules/opticm/current:/opt/modulefiles/prog/eclipse/3.7.1:/opt/modulefiles/eda/xtensa/tools/9.0.5:/opt/modulefiles/prog/perl/5.8.8:/opt/modulefiles/prog/FW4GBuildEnv/1.0:/opt/modulefiles/prog/jdk/1.6.0-17:/opt/modulefiles/prog/bullseye/root/8.7.42:/opt/modulefiles/prog/bullseye/8.7.42
# environment
KDE_IS_PRELINKED = 1
# environment
NX_CLIENT = /usr/NX/bin/nxclient
# default
CXX = g++
# environment
LSB_SHMODE = y
# environment
LSB_TRAPSIGS = trap # 15 10 12 2 1
# environment
MODULE_VERSION = 3.1.6
# default
COFLAGS = 
# environment
EDITOR = vi
# environment
LSB_JOBNAME = entercn_backend tcsh
# environment
LC_ALL = C
# environment
BWC_ENV = DONT_CARE
# default
COMPILE.def = $(M2C) $(M2FLAGS) $(DEFFLAGS) $(TARGET_ARCH)
# default
COMPILE.C = $(COMPILE.cc)
# environment
HOSTTYPE = x86_64-linux
# environment
workArchitecture = /vobs/lte_ip_architecture
# default
TANGLE = tangle
# environment
LSB_JOBRES_PID = 5540
# automatic
^F = $(notdir $^)
# environment
CN_PLATFORM = Linux
# environment
LSF_VERSION = 23
# default
LINK.F = $(FC) $(FFLAGS) $(CPPFLAGS) $(LDFLAGS) $(TARGET_ARCH)
# default
SUFFIXES := .out .a .ln .o .c .cc .C .cpp .p .f .F .r .y .l .s .S .mod .sym .def .h .info .dvi .tex .texinfo .texi .txinfo .w .ch .web .sh .elc .el
# environment
LSB_JOBINDEX = 0
# environment
GROUP = comneong
# default
COMPILE.s = $(AS) $(ASFLAGS) $(TARGET_MACH)
# default
.INCLUDE_DIRS = /usr/include /usr/local/include /usr/include
# environment
workAlgorithmsHw = /vobs/lte_ip_algorithms/lteHw
# environment
MORE = -c
# environment
LSB_JOB_STARTER = /opt/lsf_7.0.6/share/exec/interactive_jobstarter
# environment
QTINC = /usr/lib64/qt-3.3/include
# environment
QTDIR = /usr/lib64/qt-3.3
# default
MAKEINFO = makeinfo
# makefile
.DEFAULT_GOAL := 
# default
TEX = tex
# environment
LANG = C
# environment
TERM = xterm
# default
F77FLAGS = $(FFLAGS)
# default
LINK.f = $(FC) $(FFLAGS) $(LDFLAGS) $(TARGET_ARCH)
# environment
TMPDIR2 = /tmp2
# environment
LSB_JOBEXIT_STAT = 0
# environment
XTENSA_HOME = /opt/xtensa-tools_9.0.5
# environment
HOST = dgsxhw01
# variable set hash-table stats:
# Load=241/1024=24%, Rehash=0, Collisions=45/265=17%

# Pattern-specific Variable Values

# No pattern-specific variable values.

# Directories

# SCCS: could not be stat'd.
# . (device 32, inode 3572416): 94 files, 51 impossibilities.
# RCS: could not be stat'd.

# 94 files, 51 impossibilities in 3 directories.

# Implicit Rules

%.out:

%.a:

%.ln:

%.o:

%: %.o
#  commands to execute (built-in):
	$(LINK.o) $^ $(LOADLIBES) $(LDLIBS) -o $@

%.c:

%: %.c
#  commands to execute (built-in):
	$(LINK.c) $^ $(LOADLIBES) $(LDLIBS) -o $@

%.ln: %.c
#  commands to execute (built-in):
	$(LINT.c) -C$* $<

%.o: %.c
#  commands to execute (built-in):
	$(COMPILE.c) $(OUTPUT_OPTION) $<

%.cc:

%: %.cc
#  commands to execute (built-in):
	$(LINK.cc) $^ $(LOADLIBES) $(LDLIBS) -o $@

%.o: %.cc
#  commands to execute (built-in):
	$(COMPILE.cc) $(OUTPUT_OPTION) $<

%.C:

%: %.C
#  commands to execute (built-in):
	$(LINK.C) $^ $(LOADLIBES) $(LDLIBS) -o $@

%.o: %.C
#  commands to execute (built-in):
	$(COMPILE.C) $(OUTPUT_OPTION) $<

%.cpp:

%: %.cpp
#  commands to execute (built-in):
	$(LINK.cpp) $^ $(LOADLIBES) $(LDLIBS) -o $@

%.o: %.cpp
#  commands to execute (built-in):
	$(COMPILE.cpp) $(OUTPUT_OPTION) $<

%.p:

%: %.p
#  commands to execute (built-in):
	$(LINK.p) $^ $(LOADLIBES) $(LDLIBS) -o $@

%.o: %.p
#  commands to execute (built-in):
	$(COMPILE.p) $(OUTPUT_OPTION) $<

%.f:

%: %.f
#  commands to execute (built-in):
	$(LINK.f) $^ $(LOADLIBES) $(LDLIBS) -o $@

%.o: %.f
#  commands to execute (built-in):
	$(COMPILE.f) $(OUTPUT_OPTION) $<

%.F:

%: %.F
#  commands to execute (built-in):
	$(LINK.F) $^ $(LOADLIBES) $(LDLIBS) -o $@

%.o: %.F
#  commands to execute (built-in):
	$(COMPILE.F) $(OUTPUT_OPTION) $<

%.f: %.F
#  commands to execute (built-in):
	$(PREPROCESS.F) $(OUTPUT_OPTION) $<

%.r:

%: %.r
#  commands to execute (built-in):
	$(LINK.r) $^ $(LOADLIBES) $(LDLIBS) -o $@

%.o: %.r
#  commands to execute (built-in):
	$(COMPILE.r) $(OUTPUT_OPTION) $<

%.f: %.r
#  commands to execute (built-in):
	$(PREPROCESS.r) $(OUTPUT_OPTION) $<

%.y:

%.ln: %.y
#  commands to execute (built-in):
	$(YACC.y) $< 
	$(LINT.c) -C$* y.tab.c 
	$(RM) y.tab.c

%.c: %.y
#  commands to execute (built-in):
	$(YACC.y) $< 
	mv -f y.tab.c $@

%.l:

%.ln: %.l
#  commands to execute (built-in):
	@$(RM) $*.c
	$(LEX.l) $< > $*.c
	$(LINT.c) -i $*.c -o $@
	$(RM) $*.c

%.c: %.l
#  commands to execute (built-in):
	@$(RM) $@ 
	$(LEX.l) $< > $@

%.r: %.l
#  commands to execute (built-in):
	$(LEX.l) $< > $@ 
	mv -f lex.yy.r $@

%.s:

%: %.s
#  commands to execute (built-in):
	$(LINK.s) $^ $(LOADLIBES) $(LDLIBS) -o $@

%.o: %.s
#  commands to execute (built-in):
	$(COMPILE.s) -o $@ $<

%.S:

%: %.S
#  commands to execute (built-in):
	$(LINK.S) $^ $(LOADLIBES) $(LDLIBS) -o $@

%.o: %.S
#  commands to execute (built-in):
	$(COMPILE.S) -o $@ $<

%.s: %.S
#  commands to execute (built-in):
	$(PREPROCESS.S) $< > $@

%.mod:

%: %.mod
#  commands to execute (built-in):
	$(COMPILE.mod) -o $@ -e $@ $^

%.o: %.mod
#  commands to execute (built-in):
	$(COMPILE.mod) -o $@ $<

%.sym:

%.def:

%.sym: %.def
#  commands to execute (built-in):
	$(COMPILE.def) -o $@ $<

%.h:

%.info:

%.dvi:

%.tex:

%.dvi: %.tex
#  commands to execute (built-in):
	$(TEX) $<

%.texinfo:

%.info: %.texinfo
#  commands to execute (built-in):
	$(MAKEINFO) $(MAKEINFO_FLAGS) $< -o $@

%.dvi: %.texinfo
#  commands to execute (built-in):
	$(TEXI2DVI) $(TEXI2DVI_FLAGS) $<

%.texi:

%.info: %.texi
#  commands to execute (built-in):
	$(MAKEINFO) $(MAKEINFO_FLAGS) $< -o $@

%.dvi: %.texi
#  commands to execute (built-in):
	$(TEXI2DVI) $(TEXI2DVI_FLAGS) $<

%.txinfo:

%.info: %.txinfo
#  commands to execute (built-in):
	$(MAKEINFO) $(MAKEINFO_FLAGS) $< -o $@

%.dvi: %.txinfo
#  commands to execute (built-in):
	$(TEXI2DVI) $(TEXI2DVI_FLAGS) $<

%.w:

%.c: %.w
#  commands to execute (built-in):
	$(CTANGLE) $< - $@

%.tex: %.w
#  commands to execute (built-in):
	$(CWEAVE) $< - $@

%.ch:

%.web:

%.p: %.web
#  commands to execute (built-in):
	$(TANGLE) $<

%.tex: %.web
#  commands to execute (built-in):
	$(WEAVE) $<

%.sh:

%: %.sh
#  commands to execute (built-in):
	cat $< >$@ 
	chmod a+x $@

%.elc:

%.el:

(%): %
#  commands to execute (built-in):
	$(AR) $(ARFLAGS) $@ $<

%.out: %
#  commands to execute (built-in):
	@rm -f $@ 
	cp $< $@

%.c: %.w %.ch
#  commands to execute (built-in):
	$(CTANGLE) $^ $@

%.tex: %.w %.ch
#  commands to execute (built-in):
	$(CWEAVE) $^ $@

%:: %,v
#  commands to execute (built-in):
	$(CHECKOUT,v)

%:: RCS/%,v
#  commands to execute (built-in):
	$(CHECKOUT,v)

%:: RCS/%
#  commands to execute (built-in):
	$(CHECKOUT,v)

%:: s.%
#  commands to execute (built-in):
	$(GET) $(GFLAGS) $(SCCS_OUTPUT_OPTION) $<

%:: SCCS/s.%
#  commands to execute (built-in):
	$(GET) $(GFLAGS) $(SCCS_OUTPUT_OPTION) $<

# 86 implicit rules, 5 (5.8%) terminal.

# Files

# Not a target:
.web.p:
#  Implicit rule search has not been done.
#  Modification time never checked.
#  File has not been updated.
#  commands to execute (built-in):
	$(TANGLE) $<

# Not a target:
.l.r:
#  Implicit rule search has not been done.
#  Modification time never checked.
#  File has not been updated.
#  commands to execute (built-in):
	$(LEX.l) $< > $@ 
	mv -f lex.yy.r $@

# Not a target:
.dvi:
#  Implicit rule search has not been done.
#  Modification time never checked.
#  File has not been updated.

# Not a target:
.F.o:
#  Implicit rule search has not been done.
#  Modification time never checked.
#  File has not been updated.
#  commands to execute (built-in):
	$(COMPILE.F) $(OUTPUT_OPTION) $<

# Not a target:
.l:
#  Implicit rule search has not been done.
#  Modification time never checked.
#  File has not been updated.

# Not a target:
.y.ln:
#  Implicit rule search has not been done.
#  Modification time never checked.
#  File has not been updated.
#  commands to execute (built-in):
	$(YACC.y) $< 
	$(LINT.c) -C$* y.tab.c 
	$(RM) y.tab.c

# Not a target:
.o:
#  Implicit rule search has not been done.
#  Modification time never checked.
#  File has not been updated.
#  commands to execute (built-in):
	$(LINK.o) $^ $(LOADLIBES) $(LDLIBS) -o $@

# Not a target:
.y:
#  Implicit rule search has not been done.
#  Modification time never checked.
#  File has not been updated.

# Not a target:
.def.sym:
#  Implicit rule search has not been done.
#  Modification time never checked.
#  File has not been updated.
#  commands to execute (built-in):
	$(COMPILE.def) -o $@ $<

# Not a target:
.p.o:
#  Implicit rule search has not been done.
#  Modification time never checked.
#  File has not been updated.
#  commands to execute (built-in):
	$(COMPILE.p) $(OUTPUT_OPTION) $<

# Not a target:
.p:
#  Implicit rule search has not been done.
#  Modification time never checked.
#  File has not been updated.
#  commands to execute (built-in):
	$(LINK.p) $^ $(LOADLIBES) $(LDLIBS) -o $@

# Not a target:
.txinfo.dvi:
#  Implicit rule search has not been done.
#  Modification time never checked.
#  File has not been updated.
#  commands to execute (built-in):
	$(TEXI2DVI) $(TEXI2DVI_FLAGS) $<

# Not a target:
.a:
#  Implicit rule search has not been done.
#  Modification time never checked.
#  File has not been updated.

# Not a target:
.l.ln:
#  Implicit rule search has not been done.
#  Modification time never checked.
#  File has not been updated.
#  commands to execute (built-in):
	@$(RM) $*.c
	$(LEX.l) $< > $*.c
	$(LINT.c) -i $*.c -o $@
	$(RM) $*.c

# Not a target:
.w.c:
#  Implicit rule search has not been done.
#  Modification time never checked.
#  File has not been updated.
#  commands to execute (built-in):
	$(CTANGLE) $< - $@

# Not a target:
.texi.dvi:
#  Implicit rule search has not been done.
#  Modification time never checked.
#  File has not been updated.
#  commands to execute (built-in):
	$(TEXI2DVI) $(TEXI2DVI_FLAGS) $<

# Not a target:
.sh:
#  Implicit rule search has not been done.
#  Modification time never checked.
#  File has not been updated.
#  commands to execute (built-in):
	cat $< >$@ 
	chmod a+x $@

# Not a target:
.cc:
#  Implicit rule search has not been done.
#  Modification time never checked.
#  File has not been updated.
#  commands to execute (built-in):
	$(LINK.cc) $^ $(LOADLIBES) $(LDLIBS) -o $@

# Not a target:
.cc.o:
#  Implicit rule search has not been done.
#  Modification time never checked.
#  File has not been updated.
#  commands to execute (built-in):
	$(COMPILE.cc) $(OUTPUT_OPTION) $<

# Not a target:
.def:
#  Implicit rule search has not been done.
#  Modification time never checked.
#  File has not been updated.

# Not a target:
.SUFFIXES: .out .a .ln .o .c .cc .C .cpp .p .f .F .r .y .l .s .S .mod .sym .def .h .info .dvi .tex .texinfo .texi .txinfo .w .ch .web .sh .elc .el
#  Implicit rule search has not been done.
#  Modification time never checked.
#  File has not been updated.

# Not a target:
.c.o:
#  Implicit rule search has not been done.
#  Modification time never checked.
#  File has not been updated.
#  commands to execute (built-in):
	$(COMPILE.c) $(OUTPUT_OPTION) $<

# Not a target:
Makefile:
#  A default, MAKEFILES, or -include/sinclude makefile.
#  Implicit rule search has been done.
#  File does not exist.
#  File has been updated.
#  Failed to be updated.
# variable set hash-table stats:
# Load=0/32=0%, Rehash=0, Collisions=0/0=0%

# Not a target:
.r.o:
#  Implicit rule search has not been done.
#  Modification time never checked.
#  File has not been updated.
#  commands to execute (built-in):
	$(COMPILE.r) $(OUTPUT_OPTION) $<

# Not a target:
.r:
#  Implicit rule search has not been done.
#  Modification time never checked.
#  File has not been updated.
#  commands to execute (built-in):
	$(LINK.r) $^ $(LOADLIBES) $(LDLIBS) -o $@

# Not a target:
makefile:
#  A default, MAKEFILES, or -include/sinclude makefile.
#  Implicit rule search has been done.
#  File does not exist.
#  File has been updated.
#  Failed to be updated.
# variable set hash-table stats:
# Load=0/32=0%, Rehash=0, Collisions=0/0=0%

# Not a target:
.info:
#  Implicit rule search has not been done.
#  Modification time never checked.
#  File has not been updated.

# Not a target:
.elc:
#  Implicit rule search has not been done.
#  Modification time never checked.
#  File has not been updated.

# Not a target:
.l.c:
#  Implicit rule search has not been done.
#  Modification time never checked.
#  File has not been updated.
#  commands to execute (built-in):
	@$(RM) $@ 
	$(LEX.l) $< > $@

# Not a target:
.out:
#  Implicit rule search has not been done.
#  Modification time never checked.
#  File has not been updated.

# Not a target:
.C:
#  Implicit rule search has not been done.
#  Modification time never checked.
#  File has not been updated.
#  commands to execute (built-in):
	$(LINK.C) $^ $(LOADLIBES) $(LDLIBS) -o $@

# Not a target:
.r.f:
#  Implicit rule search has not been done.
#  Modification time never checked.
#  File has not been updated.
#  commands to execute (built-in):
	$(PREPROCESS.r) $(OUTPUT_OPTION) $<

# Not a target:
.S:
#  Implicit rule search has not been done.
#  Modification time never checked.
#  File has not been updated.
#  commands to execute (built-in):
	$(LINK.S) $^ $(LOADLIBES) $(LDLIBS) -o $@

# Not a target:
.texinfo.info:
#  Implicit rule search has not been done.
#  Modification time never checked.
#  File has not been updated.
#  commands to execute (built-in):
	$(MAKEINFO) $(MAKEINFO_FLAGS) $< -o $@

# Not a target:
.c:
#  Implicit rule search has not been done.
#  Modification time never checked.
#  File has not been updated.
#  commands to execute (built-in):
	$(LINK.c) $^ $(LOADLIBES) $(LDLIBS) -o $@

# Not a target:
.w.tex:
#  Implicit rule search has not been done.
#  Modification time never checked.
#  File has not been updated.
#  commands to execute (built-in):
	$(CWEAVE) $< - $@

# Not a target:
.c.ln:
#  Implicit rule search has not been done.
#  Modification time never checked.
#  File has not been updated.
#  commands to execute (built-in):
	$(LINT.c) -C$* $<

# Not a target:
.s.o:
#  Implicit rule search has not been done.
#  Modification time never checked.
#  File has not been updated.
#  commands to execute (built-in):
	$(COMPILE.s) -o $@ $<

# Not a target:
.s:
#  Implicit rule search has not been done.
#  Modification time never checked.
#  File has not been updated.
#  commands to execute (built-in):
	$(LINK.s) $^ $(LOADLIBES) $(LDLIBS) -o $@

# Not a target:
.texinfo.dvi:
#  Implicit rule search has not been done.
#  Modification time never checked.
#  File has not been updated.
#  commands to execute (built-in):
	$(TEXI2DVI) $(TEXI2DVI_FLAGS) $<

# Not a target:
.el:
#  Implicit rule search has not been done.
#  Modification time never checked.
#  File has not been updated.

# Not a target:
.texinfo:
#  Implicit rule search has not been done.
#  Modification time never checked.
#  File has not been updated.

# Not a target:
.y.c:
#  Implicit rule search has not been done.
#  Modification time never checked.
#  File has not been updated.
#  commands to execute (built-in):
	$(YACC.y) $< 
	mv -f y.tab.c $@

# Not a target:
.web.tex:
#  Implicit rule search has not been done.
#  Modification time never checked.
#  File has not been updated.
#  commands to execute (built-in):
	$(WEAVE) $<

# Not a target:
.texi.info:
#  Implicit rule search has not been done.
#  Modification time never checked.
#  File has not been updated.
#  commands to execute (built-in):
	$(MAKEINFO) $(MAKEINFO_FLAGS) $< -o $@

# Not a target:
.DEFAULT:
#  Implicit rule search has not been done.
#  Modification time never checked.
#  File has not been updated.

# Not a target:
.h:
#  Implicit rule search has not been done.
#  Modification time never checked.
#  File has not been updated.

# Not a target:
.tex.dvi:
#  Implicit rule search has not been done.
#  Modification time never checked.
#  File has not been updated.
#  commands to execute (built-in):
	$(TEX) $<

# Not a target:
.cpp.o:
#  Implicit rule search has not been done.
#  Modification time never checked.
#  File has not been updated.
#  commands to execute (built-in):
	$(COMPILE.cpp) $(OUTPUT_OPTION) $<

# Not a target:
.cpp:
#  Implicit rule search has not been done.
#  Modification time never checked.
#  File has not been updated.
#  commands to execute (built-in):
	$(LINK.cpp) $^ $(LOADLIBES) $(LDLIBS) -o $@

# Not a target:
.C.o:
#  Implicit rule search has not been done.
#  Modification time never checked.
#  File has not been updated.
#  commands to execute (built-in):
	$(COMPILE.C) $(OUTPUT_OPTION) $<

# Not a target:
.ln:
#  Implicit rule search has not been done.
#  Modification time never checked.
#  File has not been updated.

# Not a target:
.texi:
#  Implicit rule search has not been done.
#  Modification time never checked.
#  File has not been updated.

# Not a target:
.txinfo:
#  Implicit rule search has not been done.
#  Modification time never checked.
#  File has not been updated.

# Not a target:
.tex:
#  Implicit rule search has not been done.
#  Modification time never checked.
#  File has not been updated.

# Not a target:
.txinfo.info:
#  Implicit rule search has not been done.
#  Modification time never checked.
#  File has not been updated.
#  commands to execute (built-in):
	$(MAKEINFO) $(MAKEINFO_FLAGS) $< -o $@

# Not a target:
.ch:
#  Implicit rule search has not been done.
#  Modification time never checked.
#  File has not been updated.

# Not a target:
GNUmakefile:
#  A default, MAKEFILES, or -include/sinclude makefile.
#  Implicit rule search has been done.
#  File does not exist.
#  File has been updated.
#  Failed to be updated.
# variable set hash-table stats:
# Load=0/32=0%, Rehash=0, Collisions=0/0=0%

# Not a target:
.S.s:
#  Implicit rule search has not been done.
#  Modification time never checked.
#  File has not been updated.
#  commands to execute (built-in):
	$(PREPROCESS.S) $< > $@

# Not a target:
.mod:
#  Implicit rule search has not been done.
#  Modification time never checked.
#  File has not been updated.
#  commands to execute (built-in):
	$(COMPILE.mod) -o $@ -e $@ $^

# Not a target:
.mod.o:
#  Implicit rule search has not been done.
#  Modification time never checked.
#  File has not been updated.
#  commands to execute (built-in):
	$(COMPILE.mod) -o $@ $<

# Not a target:
.F.f:
#  Implicit rule search has not been done.
#  Modification time never checked.
#  File has not been updated.
#  commands to execute (built-in):
	$(PREPROCESS.F) $(OUTPUT_OPTION) $<

# Not a target:
.w:
#  Implicit rule search has not been done.
#  Modification time never checked.
#  File has not been updated.

# Not a target:
.S.o:
#  Implicit rule search has not been done.
#  Modification time never checked.
#  File has not been updated.
#  commands to execute (built-in):
	$(COMPILE.S) -o $@ $<

# Not a target:
.F:
#  Implicit rule search has not been done.
#  Modification time never checked.
#  File has not been updated.
#  commands to execute (built-in):
	$(LINK.F) $^ $(LOADLIBES) $(LDLIBS) -o $@

# Not a target:
.web:
#  Implicit rule search has not been done.
#  Modification time never checked.
#  File has not been updated.

# Not a target:
.sym:
#  Implicit rule search has not been done.
#  Modification time never checked.
#  File has not been updated.

# Not a target:
.f:
#  Implicit rule search has not been done.
#  Modification time never checked.
#  File has not been updated.
#  commands to execute (built-in):
	$(LINK.f) $^ $(LOADLIBES) $(LDLIBS) -o $@

# Not a target:
.f.o:
#  Implicit rule search has not been done.
#  Modification time never checked.
#  File has not been updated.
#  commands to execute (built-in):
	$(COMPILE.f) $(OUTPUT_OPTION) $<

# files hash-table stats:
# Load=69/1024=7%, Rehash=0, Collisions=276/1520=18%
# VPATH Search Paths

# No `vpath' search paths.

# No general (`VPATH' variable) search path.

# # of strings in strcache: 0
# # of strcache buffers: 0
# strcache size: total = 0 / max = 0 / min = 4096 / avg = 0
# strcache free: total = 0 / max = 0 / min = 4096 / avg = 0

# Finished Make data base on Thu Mar 21 11:20:45 2013

eMake

Electric Make (eMake), the main build application in ElectricAccelerator, is a new Make version invoked interactively or through build scripts. It reads makefiles in several different formats, including GNU Make and Microsoft NMAKE. Electric Make distributes commands to the cluster for remote execution and services file requests.

chenwx@chenwx ~ /app/emake/5.4.0/bin/emake -v
Electric Make version 5.4.0.37058 32-bit (build_5.4_37058_OPT_2011.03.07_18:11:12)
Copyright (C) 2002-2011 Electric Cloud, Inc.
All rights reserved.
GNU Make 3.81 emulation


chenwx@chenwx ~ /app/emake/5.4.0/bin/emake -help

Usage: emake [options] [target] ...

Basic options:

  --emake-cm=HOST[:PORT]      Cluster Manager host/port
  --emake-emulation=MODE      Make emulation mode (gmake, gmake3.81, gmake3.80, gmake3.79.1, ant, ant17, ant18)
  --emake-root=PATH           EFS root directory list
  --help                      Display this message.
  --version                   Display the product version.

Build attributes:

  --emake-build-label=LABEL   Custom build label
  --emake-class=CLASS         Build class
  --emake-impersonate-user=NAME
                              Run build as this Cluster Manager user.
  --emake-priority=LEVEL      Build priority.  LEVEL is one of:
                                low or normal (default normal)
  --emake-resource=RESOURCE   Resource requirement for this build.

Annotation options:

  --emake-annofile=FILE       (cluster mode only) Location of annotation output
  --emake-annodetail=LIST     Level of detail to include in annotation output,
                              where LIST is a comma separated list of any of
                              the following values:
                                   basic   : Basic annotation
                                   env     : Extended environment tracking
                                   file    : Files read or written
                                   history : Serialization details
                                   lookup  : All file names accessed
                                   registry: Registry updates (Windows only)
                                   waiting : Complete dependency graph
  --emake-annoupload=[01]     (cluster mode only) Enable/disable uploading of
                              annotation to the cluster manager.

History options:

  --emake-autodepend=[01]     Turn off/on automatic dependency generation
                              (default off)
  --emake-collapse=[01]       Turn off/on history collapsing (default on)
  --emake-history=MODE        History mode determines how to update the history
                              file at the end of the build, one of:
                                   create : Replace contents
                                   merge  : Merge new history with history
                                            from prior builds (default)
                                   read   : Preserve prior history
  --emake-historyfile=FILE    History file to use
  --emake-history-force=[01]  If set, update history even if the build
                              fails (default on)
  --emake-ledger=OPTIONS      Options to track in the ledger, any combination
                              (comma-separated) of: timestamp, size, command
  --emake-ledgerfile=FILE     Ledger file to use.
  --emake-subbuild-db=PATH    Path to name of database file to use
                              to look up external dependencies info.
  --emake-gen-subbuild-db=[01]
                              Set to 1 to generate the subbuild database.
                              0 (off) by default.

Performance options:

  --emake-cluster-timeout=TIMEOUT
                              Seconds to keep trying to acquire the cluster
  --emake-big-file-size=N     Minimum file size (in bytes) to be sent via
                              agent to agent transfers (default 10k)
  --emake-idle-time=N         Number of seconds before idle agents are
                              released to the cluster (default 10)
  --emake-job-limit=N         Limits the maximum number of uncommitted jobs
                              to N where 0 means unlimited (default 0)
  --emake-maxagents=N         Limit the number of agents used by this build
                              N=0 uses all available agents (default 0)
  --emake-mem-limit=N         Limits the amount of memory emake will use for
                              uncommitted make instances (default 1000000000).
  --emake-tmpdir=PATH         Directories to use for temporary files
  --emake-disable-variable-pruning=[01]
                              Don't prune unused variables during remote parse.

Compatibility options:

  --emake-clearcase=LIST      Turn on support for the specified ClearCase
                              features, where LIST is a comma separated list
                              of any of the following values:
                                   rofs    : read-only file system
                                   vobs    : per-VOB caching (for speed)
  --emake-crossmake=OS        Choose a specific operating system
                                   linux   : pick Linux nodes
                                   solaris : pick Solaris nodes
  --emake-disable-pragma=LIST Disable one or more pragmas.  LIST is a comma
                              separated list of pragma names, or 'all' to
                              disable all pragmas.
  --emake-emulation-table=TABLE
                              Configure default emulation modes for make
                              programs.  TABLE is a comma separated list of
                              NAME=MODE, where NAME is the name of a make
                              executable and MODE is the emulation mode.
  --emake-exclude-env=LIST    Comma separated list of environment variables to
                              avoid replicating on agents.
  --emake-read-only=PATH      Directories to mark as roots of read-only
                              filesystems.
  --emake-mergestreams=[01]   Merge stdout/stderr or not (default merge)
  --emake-pedantic=[01]       Turn on/off extra warning messages (default off)
  --emake-remake-limit=N      (GMake mode only) Limit makefile remaking to N
                              attempts.  N=0 disables remaking (default 10)
  --emake-showinfo=[01]       Turn on/off build info reporting (default on)
  --emake-proxy-dir=path      (electrify only) Directory containing electrify
                              proxies.

Debugging options:

  --emake-debug=[acefghjLlmnoprs]  Local debug level
                                a : node allocation
                                c : cache
                                e : environment variables
                                f : file system
                                g : profile
                                h : history
                                j : job
                                L : nmake lexer
                                l : ledger
                                m : memory usage
                                n : node
                                o : parse output file
                                p : parse
                                r : relocation data
                                s : subbuilds
  --emake-logfile=FILE        Location for debug log file
  --emake-rdebug=[acefghjLlmnopr]  Remote debug level; same codes
  --emake-rlogdir=DIR         Directory for remote debug logs

GNU Make Emulation (--emake-emulation=gmake) supports:

  -b                          Ignored (also ignored by gmake)
  -B, --always-make           Unconditionally make all targets.
  -C DIRECTORY
    --directory=DIRECTORY     Change to DIRECTORY before proceeding
  -d                          Not supported (see --emake-debug instead)
  -e
    --environment-override    Environment variables override makefile variables
  -f FILE
    --file=FILE
    --makefile=FILE           Read the makefile called FILE
  -i
    --ignore-errors           Ignore error returns from commands
  -I DIRECTORY
    --include=DIRECTORY       Look in DIRECTORY for 'include'd makefiles
  -j
    --jobs=N                  Ignored
  -k
    --keep-going              Build unrelated targets when an error occurs
  -l N
    --max-load=N
    --load-average=N          Ignored
  -L, --check-symlink-times   Use the latest mtime between symlinks and target.
  -m                          Ignored (also ignored by gmake)
  -n
    --just-print
    --dry-run
    --recon                   Print commands without running them
  --no-print-directory        Disables -w
  -o FILE
    --older=FILE              Not supported
  -p
    --print-data-base         Not supported
  -q
    --question                Not supported
  -r
    --no-builtin-rules        Disable the default pattern rules
  -R
    --no-builtin-variables    Disable the default variables
  -s
    --silent
    --quiet                   Don't print out commands
  -S
    --stop
    --dont-keep-going         Disables -k
  -t
    --touch                   Not supported
  -v
    --version                 Prints emake version information
  -w
    --print-directory         Prints Entering/Leaving message for each directory  -W FILE
    --what-if=FILE
    --new-if=FILE
    --assume-new=FILE         Pretend that FILE is always new
  --warn-undefined-variables  Warn when an undefined variable is referenced.

xmake

xmake is a cross-platform build utility based on Lua.

References