【发布时间】:2015-04-03 15:05:22
【问题描述】:
在我的 makefile 中有一个变量 FOO:
FOO = /path/to/bar
是否可以在 makefile 调用期间覆盖此变量?类似于以下内容:
FOO=/path/to/foo make all
【问题讨论】:
标签: makefile
在我的 makefile 中有一个变量 FOO:
FOO = /path/to/bar
是否可以在 makefile 调用期间覆盖此变量?类似于以下内容:
FOO=/path/to/foo make all
【问题讨论】:
标签: makefile
在指定目标之前将它们指定为Var=Value,例如make FOO=/path/to/foo all。
$ cat Makefile
Foo = asdf
all:
echo $(Foo)
$ make all
echo asdf
asdf
$ make Foo=bar all
echo bar
bar
【讨论】:
变量获得赋值的方式在 GNU make 手册的How Variables Get Their Values 部分中指定。
变量可以通过几种不同的方式获取值:
- 您可以在运行 make 时指定一个覆盖值。见Overriding Variables。
- 您可以在 makefile 中指定一个值,可以使用赋值(参见 Setting Variables)或逐字定义(参见 Defining Multi-Line Variables)。
- 环境中的变量成为 make 变量。见Variables from the Environment。
- 为每个规则赋予了几个自动变量的新值。这些中的每一个都有一个单一的常规用途。见Automatic Variables。
- 多个变量具有恒定的初始值。见Variables Used by Implicit Rules。
因此,正如三十二号上校所说,您可以在命令行上覆盖在 makefile 中设置的变量。
如果您希望这是一个要永久设置的变量,您也可以使用?= 赋值,然后将使用该变量的环境值。
【讨论】: