我制作了像这样的文件目标
foo:
i = 1
@echo $(i)
当我像这样运行make文件时:
$ make foo
i = 1
make:i:找不到命令
Makefile:2:目标配方#foo'失败
make:[foo]错误127
但是,如果我没有在作业中给出空格(即)
i=1
然后没有错误但没有输出,i的值不打印
答案 0 :(得分:2)
在第一种情况下,您指示var iframe = document.getElementById('iframeid');
iframe.src = iframe.src;
运行shell命令:make
。
如果您想要i = 1
内的变量,则应设置不带前导空格/制表符。
我假设您使用的是GNU的Makefile
,并且您想要检查Recipe Syntax(或其他make
的类似内容):
“规则上下文”中的变量定义,由选项卡缩进 作为第一个字符,将被视为一部分 recipe,而不是make变量定义,并传递给shell。
答案 1 :(得分:0)
首次尝试运行带有参数i
和=
的命令2
。外壳中的适当分配具有no spaces on either side of the equals sign.
您的第二个问题是,在两条物理线上的配方将运行两个不相关的Shell实例。第一个将变量设置为值,然后退出并丢失该变量。第二个无关的实例不知道第一个实例是做什么的,当然也没有任何变量分配的痕迹。解决此问题的方法是将这两条逻辑上合并为一行(只要它们之间有分号,您仍然可以将这些行拆分为几条物理行):
foo:
i=1; \
echo "$${i}"
还请注意我们需要如何使美元符号加倍,以防止make
对其进行解释;并在外壳中正确使用引号引起来。 (在这种特殊情况下,我们知道该字符串不包含任何shell元字符;但是许多初学者也偶然发现了此字符。)
GNU Make或者允许您指定.ONESHELL
,这将强制在单个shell实例中对配方中的命令进行全部评估;
.ONESHELL:
foo:
i=1
echo "$${i}"