从命令行传递其他变量来制作我可以将变量作为命令行参数传递给GNU Makefile吗?换句话说,我想传递一些最终会成为Makefile变量的参数。
3 回答
牧羊人nacy
TA贡献1862条经验 获得超7个赞
您有几个选项可以从makefile外部设置变量:
从环境 - 每个环境变量都转换为具有相同名称和值的makefile变量。
您可能还想设置
-e
选项(aka--environments-override
),您的环境变量将覆盖makefile中的赋值(除非这些赋值本身使用该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
从父Make导出 - 如果从Makefile调用Make,通常不应该显式写这样的变量赋值:
# Don't do this!target: $(MAKE) -C target CC=$(CC) CFLAGS=$(CFLAGS)
相反,更好的解决方案可能是导出这些变量。导出变量使其进入每个shell调用的环境中,并且使用这些命令进行调用将按照上面的指定选择这些环境变量。
# Do like thisCFLAGS=-gexport CFLAGStarget: $(MAKE) -C target
您也可以使用不带参数导出所有变量
export
。
素胚勾勒不出你
TA贡献1827条经验 获得超9个赞
假设您有一个这样的makefile:
action: echo argument is $(argument)
然后你会打电话给它 make action argument=something
添加回答
举报
0/150
提交
取消