Go to the first, previous, next, last section, table of contents.

### 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 dependency 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. These are described in the following section.

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.

Go to the first, previous, next, last section, table of contents.