f78
Including Other Makefiles
Contents|Index|Previous|Next
Including Other Makefiles
The include directive tells make to suspend reading the current make-file and read one or more other makefiles
before continuing. The directive is a line in the makefile that looks like include filenames....
filenames can contain shell file name patterns. Extra spaces are allowed and ignored at
the beginning of the line, but a tab is not allowed. (If the line begins with
a tab, it will be considered a command line.) Whitespace is required between include and the file names, and between file names; extra whitespace is ignored there
and at the end of the directive. A comment starting with # is allowed at the end of the line. If the file names contain any variable or
function references, they are expanded. See How to Use Variables.
For example, if you have three
.mk files, a.mk, b.mk, and c.mk, and $(bar) expands to bish bash, then the expression, include foo *.mk $(bar), is equivalent to include foo a.mk b.mk c.mk bish bash.
When
make processes an include directive, it suspends reading of the containing makefile and reads from each
listed file in turn. When that is finished, make resumes reading the makefile in which the directive appears. One occasion for
using include directives is when several programs, handled by individual makefiles in
various directories, need to use a common set of variable definitions (see Setting Variables) or pattern rules (see Defining and Redefining Pattern Rules).
Anoth
fe9
er such occasion is when you want to generate dependencies from source
files automatically; the dependencies can be put in a file that is included by
the main makefile. This practice is generally cleaner than that of somehow
appending the dependencies to the end of the main makefile as has been traditionally
done with other versions of
make. See Generating Dependencies Automatically.
If the specified
name does not start with a slash, and the file is not found in the current
directory, several other directories are searched. First, any directories you have
specified with the -I or the --include-dir options are searched (see Summary of Options). Then the directories (if they exist) are searched, in the following order.
1.
prefix/include (normally, /usr/local/include)
2.
/usr/gnu/include,
3.
/usr/local/include, /usr/include.
If an included makefile cannot be found in any of these directories, a warning
message is generated, but it is not an immediately fatal error; processing of
the makefile containing the
include continues. Once it has finished reading makefiles, make will try to remake any that are out of date or dont exist. See How Makefiles Are Remade. Only after it has tried to find a way to remake a makefile and failed, will make diagnose the missing makefile as a fatal error.
If you want
make to simply ignore a makefile which does not exist and cannot be remade, with
no error message, use the -include directive instead of include, as in -include filenames.... This acts like include in every way except that there is no error (not even a warning) if any of the
filenames do not exist.
0