|
Default targets
After the macros and suffix rules,
make looks for the first “target” in a file, and builds that,
unless you specify differently. So for the following
makefile:
CPP = mycompiler
.SUFFIXES: .exe .cpp
.cpp.exe:
$(CPP) $<
target1.exe:
target2.exe:
If you just type
‘make’, then target1.exe will be built (using the
default suffix rule) because that’s the first target that make
encounters. To build target2.exe you’d have to explicitly say
‘make target2.exe’. This becomes tedious, so you normally
create a default “dummy” target that depends on all the rest of the
targets, like this:
CPP = mycompiler
.SUFFIXES: .exe .cpp
.cpp.exe:
$(CPP) $<
all: target1.exe target2.exe
Here, ‘all’ does not
exist and there’s no file called ‘all’, so every time
you type make, the program sees ‘all’ as the first
target in the list (and thus the default target), then it sees that
‘all’ does not exist so it had better make it by checking all
the dependencies. So it looks at target1.exe and (using the suffix rule)
sees whether (1) target1.exe exists and (2) whether target1.cpp is
more recent than target1.exe, and if so runs the suffix rule (if you
provide an explicit rule for a particular target, that rule is used instead).
Then it moves on to the next file in the default target list. Thus, by creating
a default target list (typically called ‘all’ by convention,
but you can call it anything) you can cause every executable in your project to
be made simply by typing ‘make’. In addition, you can have
other non-default target lists that do other things – for example, you
could set it up so that typing ‘make debug’ rebuilds all your
files with debugging wired
in.
|
|