可以附加到 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 中的设置。
让我们考虑以下 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 中的设置。