Node:Substitution Refs, Next:Computed Names, Previous:Advanced, Up:Advanced

#### Substitution References

A substitution reference substitutes the value of a variable with alterations that you specify. It has the form `$(`var`:`a`=`b`)` (or `${`var`:`a`=`b`}`) and its meaning is to take the value of the variable var, replace every a at the end of a word with b in that value, and substitute the resulting string.

When we say "at the end of a word", we mean that a must appear either followed by whitespace or at the end of the value in order to be replaced; other occurrences of a in the value are unaltered. For example:

         foo := a.o b.o c.o
         bar := $(foo:.o=.c)

sets `bar` to `a.c b.c c.c`. See Setting Variables.

A substitution reference is actually an abbreviation for use of the `patsubst` expansion function (see Functions for String Substitution and Analysis). We provide substitution references as well as `patsubst` for compatibility with other implementations of `make`.

Another type of substitution reference lets you use the full power of the `patsubst` function. It has the same form `$(`var`:`a`=`b`)` described above, except that now a must contain a single `%` character. This case is equivalent to `$(patsubst` a`,`b`,$(`var`))`. See Functions for String Substitution and Analysis, for a description of the `patsubst` function.

    For example:

         foo := a.o b.o c.o
         bar := $(foo:%.o=%.c)

sets `bar` to `a.c b.c c.c`.