Contents | < Browse | Browse >
The Function `wildcard'
-----------------------
Wildcard expansion happens automatically in rules. But wildcard
expansion does not normally take place when a variable is set, or
inside the arguments of a function. If you want to do wildcard
expansion in such places, you need to use the `wildcard' function, like
this:
$(wildcard PATTERN)
This string, used anywhere in a makefile, is replaced by a
space-separated list of names of existing files that match the pattern
PATTERN.
One use of the `wildcard' function is to get a list of all the C
source files in a directory, like this:
$(wildcard *.c)
We can change the list of C source files into a list of object files
by replacing the `.o' suffix with `.c' in the result, like this:
$(patsubst %.c,%.o,$(wildcard *.c))
(Here we have used another function, `patsubst'. Text Functions)
Thus, a makefile to compile all C source files in the directory and
then link them together could be written as follows:
objects := $(patsubst %.c,%.o,$(wildcard *.c))
foo : $(objects)
cc -o foo $(objects)
(This takes advantage of the implicit rule for compiling C programs, so
there is no need to write explicit rules for compiling the files.
Flavors, for an explanation of
`:=', which is a variant of `='.)