GNU make manual 翻译( 一百五十六)

继续翻译

6.3 Advanced Features for Reference to Variables
================================================

This section describes some advanced features you can use to reference
variables in more flexible ways.

6.3.1 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'.  *Note Setting Variables: Setting.

   A substitution reference is actually an abbreviation for use of the
`patsubst' expansion function (*note Functions for String Substitution
and Analysis: Text Functions.).  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))'.  *Note Functions for
String Substitution and Analysis: Text Functions, 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'.

6.3 变量参照的高级功能
================================================

这一节描述你可以用来更加灵活地参照变量的高级功能。

6.3.1 替换参照
-----------------------------

一个替换参照用你指定的变化,来替换一个变量的值。它的格式是 $(VAR: A=B) (或 ${VAR:A=B}),并且它的含义是把变量 VAR的值,在其中所有单词末尾A的值换成B的值,然后替换整个结果字符串。

当我们说 在单词的末尾,我们指的是 A 必须出现在空格之后或则会再一个要替换的值得末尾;其他位置不处理,例如:

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

设置 bar 的值为 a.c b.c c.c ,*Note Setting Variables:  Setting.

一个替换参照实际上是patsubst 扩展函数的缩略词(*note Functions for String Substitution and Analysis: Text Functions.)。我们提供patsubst ,也提供替换参照是为了和其他版本make的兼容性。

另一个类型的替换参照让你使用patsubst 函数的完整威力。它有着和 $(VAR:A=B) 一样的格式,除了现在A 必须包含一个单独的 %符号。这个场合下等同于 $(patsubst A,B,$(VAR))。 想要查看patsubst 函数的说明,参照 *Note Functions for String Substitution and Analysis: Text Functions.

例如:

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

把 `bar' 设置为 'a.c b.c c.c'.

后文待续

原文地址:https://www.cnblogs.com/gaojian/p/2710849.html