我可以将变量作为命令行参数传递给 GNU Makefile 吗?换句话说,我想传递一些最终将成为 Makefile 中的变量的参数。
您有几个选项可以从 makefile 外部设置变量:
您可能还想设置-eoption (aka --environments-override) on,并且您的环境变量将覆盖 makefile 中的分配(除非这些分配本身使用override指令?=。但是,不建议这样做,使用分配(条件变量)更好更灵活赋值运算符,它仅在变量尚未定义时才有效):
-e
--environments-override
override
?=
FOO?=default_value_if_not_set_in_environment
请注意,某些变量不是从环境继承的:
* `MAKE`从脚本的名称中获取 * `SHELL`要么在 makefile 中设置,要么默认为`/bin/sh`(基本原理:命令在 makefile 中指定,并且它们是特定于 shell 的)。
make
make target FOO=bar
但是,除非您在分配中使用指令,否则 将忽略 makefile 中 _对变量的所有FOO_分配。(效果与环境变量选项相同)。override-e
FOO
# Don't do this!
target: $(MAKE) -C target CC=$(CC) CFLAGS=$(CFLAGS)
相反,更好的解决方案可能是导出这些变量。导出一个变量会使其进入每个 shell 调用的环境,并且从这些命令中进行调用会按照上面指定的方式选择这些环境变量。
# Do like this CFLAGS=-g export CFLAGS target: $(MAKE) -C target
您还可以使用不带参数导出 所有export变量。
export