可以附加到 make 变量而不覆盖 Makefile 中设置的内容吗?

Can one append to a make variable without overwriting what's set in the Makefile?

让我们考虑以下 Makefile:

.PHONY : all

OPTS += -DBLA
OPTS += -DBLUBB
STUFF = default

all :
    ./do_something $(OPTS) $(STUFF)

可以在命令行上传递变量。所以用下面的调用

confus@confusion:/tmp/$ make STUFF=foo

make will 运行 ./do_something -DBLA -DBLUBB foo.

与我认为不能附加到变量的相反:

confus@confusion:/tmp/$ make STUFF+=foo OPTS+=-DMOREOPT

会简单地 运行 ./do_something -DMOREOPT foo (就好像我遗漏了加号),而我希望它是 ./do_something -DBLA -DBLUBB -DMOREOPT default foo.

有没有办法使用命令行选项附加到 make 变量?

如果这是 GNU make,您必须在 makefile 中使用 override 指令来指定您希望 makefile 中设置的值优先于命令行值:

override OPTS += -DBLA
override OPTS += -DBLUBB
override STUFF += default

如果重要,请注意,这会将命令行中提供的设置放在第一位,最后是 makefile 中的设置。