Wildcards can be used in the commands of a rule, where they are expanded by the shell. For example, here is a rule to delete all the object files:
clean: rm -f *.o
Wildcards are also useful in the prerequisites of a rule. With the
following rule in the makefile, make print
will print all the
.c
files that have changed since the last time you printed them:
print: *.c lpr -p $? touch print
This rule uses print
as an empty target file; see Empty Target Files to Record Events. (The automatic variable
$?
is used to print only those files that have changed; see
Automatic Variables.)
Wildcard expansion does not happen when you define a variable. Thus, if you write this:
objects = *.o
then the value of the variable objects
is the actual string
*.o
. However, if you use the value of objects
in a target,
prerequisite or command, wildcard expansion will take place at that time.
To set objects
to the expansion, instead use:
objects := $(wildcard *.o)
See Wildcard Function.