The goals are the targets that
make should strive ultimately
to update. Other targets are updated as well if they appear as
prerequisites of goals, or prerequisites of prerequisites of goals, etc.
By default, the goal is the first target in the makefile (not counting
targets that start with a period). Therefore, makefiles are usually
written so that the first target is for compiling the entire program or
programs they describe. If the first rule in the makefile has several
targets, only the first target in the rule becomes the default goal, not
the whole list. You can manage the selection of the default goal from
within your makefile using the
(see Other Special Variables).
You can also specify a different goal or goals with command line
make. Use the name of the goal as an argument.
If you specify several goals,
make processes each of them in
turn, in the order you name them.
Any target in the makefile may be specified as a goal (unless it
starts with ‘-’ or contains an ‘=’, in which case it will be
parsed as a switch or variable definition, respectively). Even
targets not in the makefile may be specified, if
make can find
implicit rules that say how to make them.
Make will set the special variable
MAKECMDGOALS to the
list of goals you specified on the command line. If no goals were given
on the command line, this variable is empty. Note that this variable
should be used only in special circumstances.
An example of appropriate use is to avoid including .d files
clean rules (see Automatic Prerequisites), so
make won't create them only to immediately remove them
sources = foo.c bar.c ifneq ($(MAKECMDGOALS),clean) include $(sources:.c=.d) endif
One use of specifying a goal is if you want to compile only a part of the program, or only one of several programs. Specify as a goal each file that you wish to remake. For example, consider a directory containing several programs, with a makefile that starts like this:
.PHONY: all all: size nm ld ar as
If you are working on the program
size, you might want to say
‘make size’ so that only the files of that program are recompiled.
Another use of specifying a goal is to make files that are not normally made. For example, there may be a file of debugging output, or a version of the program that is compiled specially for testing, which has a rule in the makefile but is not a prerequisite of the default goal.
Another use of specifying a goal is to run the recipe associated with a phony target (see Phony Targets) or empty target (see Empty Target Files to Record Events). Many makefiles contain a phony target named clean which deletes everything except source files. Naturally, this is done only if you request it explicitly with ‘make clean’. Following is a list of typical phony and empty target names. See Standard Targets, for a detailed list of all the standard target names which GNU software packages use.