Contents|Index|Previous|Next
The
origin
function
The
origin
function is unlike most other functions in that it does not operate on
the values of variables; it tells you something about a variable.
Specifically, it tells you
its origin. Its syntax is:
Note:
variable
is the name of a variable to inquire about; it is not a reference
to that variable. Therefore you would not normally use a ‘$’
or parentheses when writing it. (You can, however, use a variable reference
in the name if you want the name not to be a constant.)
The result of this function
is a string telling you how the variable, variable,
was defined as the following descriptions discuss.
‘undefined’
Used if variable
was never defined.
‘default’
Note:
If you have redefined a
default variable, the origin
function will return the origin of the later definition.
‘environment’
Used if variable
was defined as an environment variable and the ‘-e’
option is not turned on (see Summary
of options).
‘environment
override’
Used if variable
was defined as an environment variable and the ‘-e’
option is turned on (see Summary
of options).
‘file’
Used if variable
was defined in a makefile.
‘command
line’
Used if variable
was defined on the command line.
‘override’
‘automatic’
Used if variable
is an automatic variable defined for the execution of the commands for
each rule (see Automatic
variables).
This information is primarily
useful (other than for your curiosity) to determine if you want to believe
the value of a variable. For example, suppose you have a makefile, ‘foo’,
that includes another makefile, ‘bar’.
You want a variable, bletch,
to be defined in ‘bar’
if you run the command, ‘make
-f bar’, even
if the environment contains a definition of bletch.
However, if ‘foo’
defined bletch
before including ‘bar’,
you do not want to override that definition. This could be done by using
an override
directive in ‘foo’,
giving that definition precedence over the later definition in ‘bar’;
unfortunately, the override
directive would also override any command line definitions. So, ‘bar’
could include the following.
ifdef bletch
ifeq "$(origin bletch)" "environment"
bletch = barf, gag, etc.
endif
endif
If bletch
has been defined from the environment, this will redefine it. If you want
to override a previous definition of bletch
if it came from the environment, even under ‘-e’,
you could instead write the following.
ifneq "$(findstring environment,$(origin
bletch))" ""
bletch = barf, gag, etc.
endif
Top|Contents|Index|Previous|Next