我正在使用GNU Make 3.81,我的Makefile中有以下规则:
jslint :
java org.mozilla.javascript.tools.shell.Main jslint.js mango.js \
| sed 's/Lint at line \([0-9]\+\) character \([0-9]\+\)/mango.js:\1:\2/'
如果我直接在命令行输入它,这可以正常工作,但如果我用“make jslint”运行它,则正则表达式不匹配。但是,如果我在Makefile中用\+
替换\{1,\}
:
jslint :
java org.mozilla.javascript.tools.shell.Main jslint.js mango.js \
| sed 's/Lint at line \([0-9]\{1,\}\) character \([0-9]\{1,\}\)/mango.js:\1:\2/'
Makefile中的\+
是否有一些特殊含义,或者这是一个错误?
答案 0 :(得分:2)
\+
没有任何特殊含义。另外,我想,GNU Make没有任何问题。
即使在第一种情况下,表达式可能 匹配,但事情可能是
当当前目录中已存在文件 make jslnit
时,请致电jslint
。在这种情况下,它不会被视为目标,应该调用适当的命令。可以肯定的是,尝试在命令中插入echo
语句,只是为了告诉Make必须执行它们:
jslint :
echo I got here
java org.mozilla.javascript.tools.shell.Main jslint.js mango.js \
| sed 's/Lint at line \([0-9]\+\) character \([0-9]\+\)/mango.js:\1:\2/'
您对java
的调用会产生不同的结果(可能会发生变化?)
/bin/sh
,并且可以如图所示进行更改{ {3}})和你输入命令的shell(检查两个版本是否匹配)不同,和它会以某种方式影响你正在做的事情。例如,在这些shell中调用了不同的sed默认版本,其中一个\+
不等同于\{1,\}
。