|GNU Make Manual||www.imodulo.com · 2003-04-05|
|[ Software | Documentation | Contact ]|
Variable values of the top-level
make can be passed to the sub-
make through the environment by explicit request. These variables are defined in the sub-
make as defaults, but do not override what is specified in the makefile used by the sub-
make makefile unless you use the
-e switch (Summary of Options).
To pass down, or export, a variable,
make adds the variable and its value to the environment for running each command. The sub-
make, in turn, uses the environment to initialize its table of variable values. Variables from the Environment.
Except by explicit request,
make exports a variable only if it is either defined in the environment initially or set on the command line, and if its name consists only of letters, numbers, and underscores. Some shells cannot cope with environment variable names consisting of characters other than letters, numbers, and underscores.
The special variables
MAKEFLAGS are always exported (unless you unexport them).
MAKEFILES is exported if you set it to anything.
make automatically passes down variable values that were defined on the command line, by putting them in the
MAKEFLAGS variable. Options/Recursion.
Variables are not normally passed down if they were created by default by
make (Variables Used by Implicit Rules). The sub-
make will define these for itself.
If you want to export specific variables to a sub-
make, use the
export directive, like this:
export variable ...
If you want to prevent a variable from being exported, use the
unexport directive, like this:
unexport variable ...
In both of these forms, the arguments to
unexport are expanded, and so could be variables or functions which expand to a (list of) variable names to be (un)exported.
As a convenience, you can define a variable and export it at the same time by doing:
export variable = value
has the same result as:
variable = value export variable
export variable := value
has the same result as:
variable := value export variable
export variable += value
is just like:
variable += value export variable
You may notice that the
unexport directives work in
make in the same way they work in the shell,
If you want all variables to be exported by default, you can use
export by itself:
make that variables which are not explicitly mentioned in an
unexport directive should be exported. Any variable given in an
unexport directive will still not be exported. If you use
export by itself to export variables by default, variables whose names contain characters other than alphanumerics and underscores will not be exported unless specifically mentioned in an
The behavior elicited by an
export directive by itself was the default in older versions of GNU
make. If your makefiles depend on this behavior and you want to be compatible with old versions of
make, you can write a rule for the special target
.EXPORT_ALL_VARIABLES instead of using the
export directive. This will be ignored by old
makes, while the
export directive will cause a syntax error. Likewise, you can use
unexport by itself to tell
make not to export variables by default. Since this is the default behavior, you would only need to do this if
export had been used by itself earlier (in an included makefile, perhaps). You cannot use
unexport by themselves to have variables exported for some commands and not for others. The last
unexport directive that appears by itself determines the behavior for the entire run of
As a special feature, the variable
MAKELEVEL is changed when it is passed down from level to level. This variable's value is a string which is the depth of the level as a decimal number. The value is
0 for the top-level
1 for a sub-
2 for a sub-sub-
make, and so on. The incrementation happens when
make sets up the environment for a command.
The main use of
MAKELEVEL is to test it in a conditional directive (Conditional Parts of Makefiles); this way you can write a makefile that behaves one way if run recursively and another way if run directly by you.
You can use the variable
MAKEFILES to cause all sub-
make commands to use additional makefiles. The value of
MAKEFILES is a whitespace-separated list of file names. This variable, if defined in the outer-level makefile, is passed down through the environment; then it serves as a list of extra makefiles for the sub-
make to read before the usual or specified ones. The Variable
|© Free Software Foundation, Inc.|