(make.info.gz) Wildcard Pitfall
Info Catalog
(make.info.gz) Wildcard Examples
(make.info.gz) Wildcards
(make.info.gz) Wildcard Function
4.4.2 Pitfalls of Using Wildcards
---------------------------------
Now here is an example of a naive way of using wildcard expansion, that
does not do what you would intend. Suppose you would like to say that
the executable file `foo' is made from all the object files in the
directory, and you write this:
objects = *.o
foo : $(objects)
cc -o foo $(CFLAGS) $(objects)
The value of `objects' is the actual string `*.o'. Wildcard expansion
happens in the rule for `foo', so that each _existing_ `.o' file
becomes a prerequisite of `foo' and will be recompiled if necessary.
But what if you delete all the `.o' files? When a wildcard matches
no files, it is left as it is, so then `foo' will depend on the
oddly-named file `*.o'. Since no such file is likely to exist, `make'
will give you an error saying it cannot figure out how to make `*.o'.
This is not what you want!
Actually it is possible to obtain the desired result with wildcard
expansion, but you need more sophisticated techniques, including the
`wildcard' function and string substitution. The Function
`wildcard' Wildcard Function.
Microsoft operating systems (MS-DOS and MS-Windows) use backslashes
to separate directories in pathnames, like so:
c:\foo\bar\baz.c
This is equivalent to the Unix-style `c:/foo/bar/baz.c' (the `c:'
part is the so-called drive letter). When `make' runs on these
systems, it supports backslashes as well as the Unix-style forward
slashes in pathnames. However, this support does _not_ include the
wildcard expansion, where backslash is a quote character. Therefore,
you _must_ use Unix-style slashes in these cases.
Info Catalog
(make.info.gz) Wildcard Examples
(make.info.gz) Wildcards
(make.info.gz) Wildcard Function
automatically generated byinfo2html