猿问

从命令行传递其他变量来制作

从命令行传递其他变量来制作

我可以将变量作为命令行参数传递给GNU Makefile吗?换句话说,我想传递一些最终会成为Makefile变量的参数。



慕容3067478
浏览 484回答 3
3回答

牧羊人nacy

您有几个选项可以从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。

慕侠2389804

最简单的方法是:make foo=bar target然后在你的makefile中你可以参考$(foo)。请注意,这不会自动传播到子品牌。如果您正在使用子品牌,请参阅此文章:将变量传递给子品牌

素胚勾勒不出你

假设您有一个这样的makefile:action:     echo argument is $(argument)然后你会打电话给它 make action argument=something
随时随地看视频慕课网APP
我要回答