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

### Writing Shell Commands with Directory Search

When a dependency is found in another directory through directory search, this cannot change the commands of the rule; they will execute as written. Therefore, you must write the commands with care so that they will look for the dependency in the directory where `make` finds it.

This is done with the automatic variables such as ``$^'` (see section Automatic Variables). For instance, the value of ``$^'` is a list of all the dependencies of the rule, including the names of the directories in which they were found, and the value of ``$@'` is the target. Thus:

    foo.o : foo.c
            cc -c $(CFLAGS) $^ -o $@

(The variable `CFLAGS` exists so you can specify flags for C compilation by implicit rules; we use it here for consistency so it will affect all C compilations uniformly; see section Variables Used by Implicit Rules.)

Often the dependencies include header files as well, which you do not want to mention in the commands. The automatic variable ``$<'` is just the first dependency:

    VPATH = src:../headers
    foo.o : foo.c defs.h hack.h
            cc -c $(CFLAGS) $< -o $@

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