Prev: Defining Up: Using Variables
Variables from the Environment
Variables in `make' can come from the environment in which `make' is
run. Every environment variable that `make' sees when it starts up is
transformed into a `make' variable with the same name and value. But
an explicit assignment in the makefile, or with a command argument,
overrides the environment. (If the `-e' flag is specified, then values
from the environment override assignments in the makefile. *Note
Summary of Options: Options Summary. But this is not recommended
Thus, by setting the variable `CFLAGS' in your environment, you can
cause all C compilations in most makefiles to use the compiler switches
you prefer. This is safe for variables with standard or conventional
meanings because you know that no makefile will use them for other
things. (But this is not totally reliable; some makefiles set `CFLAGS'
explicitly and therefore are not affected by the value in the
When `make' is invoked recursively, variables defined in the outer
invocation can be passed to inner invocations through the environment
(Note: Recursive Use of `make'.). By default, only
variables that came from the environment or the command line are passed
to recursive invocations. You can use the `export' directive to pass
other variables. *Note Communicating Variables to a Sub-`make':
Variables/Recursion, for full details.
Other use of variables from the environment is not recommended. It
is not wise for makefiles to depend for their functioning on
environment variables set up outside their control, since this would
cause different users to get different results from the same makefile.
This is against the whole purpose of most makefiles.
Such problems would be especially likely with the variable `SHELL',
which is normally present in the environment to specify the user's
choice of interactive shell. It would be very undesirable for this
choice to affect `make'. So `make' ignores the environment value of
automatically generated by info2www