从makefile中覆盖变量

24

在我的 makefile 中,我有一个变量 FOO

FOO = /path/to/bar

在Makefile调用期间是否可能覆盖此变量?例如以下内容:

FOO=/path/to/foo make all
3个回答

43

将它们作为参数指定给make,例如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

2
命令行中相对于目标名称的位置并不重要,它们不是位置相关的。 - Etan Reisner
2
这就是一个答案应该看起来的样子,简单明了的例子,直接切入主题。 - danfromisrael

18
变量如何获得其值的方法在GNU make手册的变量如何赋值一节中指定。
变量可以通过以下几种方式获取值:

正如Thirty Two上校所说,您可以在命令行中覆盖在makefile中设置的变量。

如果您希望将其作为要持久设置的变量,则可以使用?=赋值,然后该变量的环境值将被使用。


1

你也可以简单地使用?=运算符:

$ cat Makefile 
Foo ?= asdf

all:
    echo $(Foo)
$ make all
echo asdf
asdf
$ Foo=bar make all
echo bar
bar

这将接受来自环境变量和命令行参数的覆盖。如果你只需要后者,你可以继续使用 =/:=,并使用 make foo=bar 进行覆盖。 - HolyBlackCat

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接