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 where it came from.
The syntax of the
origin function is:
Note that variable is the name of a variable to inquire about; 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:
CCand so on. See section Variables Used by Implicit Rules. Note that if you have redefined a default variable, the
originfunction will return the origin of the later definition.
overridedirective in a makefile (see section The
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
ifdef bletch ifeq "$(origin bletch)" "environment" bletch = barf, gag, etc. endif endif
bletch has been defined from the environment, this will redefine
If you want to override a previous definition of
bletch if it came
from the environment, even under `-e', you could instead write:
ifneq "$(findstring environment,$(origin bletch))" "" bletch = barf, gag, etc. endif
Here the redefinition takes place if `$(origin bletch)' returns either `environment' or `environment override'. See section Functions for String Substitution and Analysis.
Go to the first, previous, next, last section, table of contents.