DOC HOME SITE MAP MAN PAGES GNU INFO SEARCH
 

(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