以下makefile片段中的行@:
会导致
make (e=87): The parameter is incorrect.
Makefile:210: recipe for target 'depend' failed
(第210行是@:
)的第一个实例
为什么?
# We check if any depfile is newer than Makefile and decide to
# concatenate only if that is true.
depend:
@:
@if egrep "^# DO NOT DELETE THIS LINE" Makefile >/dev/null && [ -z "`find $(DEPS) -newer Makefile 2>/dev/null; exit 0`" ]; then :; else \
( $(PERL) -pe 'exit 0 if /^# DO NOT DELETE THIS LINE.*/' < Makefile; \
echo '# DO NOT DELETE THIS LINE -- make depend depends on it.'; \
echo; \
for f in $(DEPS); do \
if [ -f $$f ]; then cat $$f; fi; \
done ) > Makefile.new; \
if cmp Makefile.new Makefile >/dev/null 2>&1; then \
rm -f Makefile.new; \
else \
mv -f Makefile.new Makefile; \
fi; \
fi
@:
make -v
提供以下版本信息
GNU Make 3.82.90
Built for i686-pc-mingw32
答案 0 :(得分:0)
首先,你使用的是GNU make版本(3.82.90),它不仅陈旧,而且更重要的是它是一个预发布版本(所有xx9x版本号都是下一个主要版本的alpha / beta版本发布)。您至少应该切换到GNU make的真实版本:预发布版本有错误和问题在最终版本发布之前已经解决。
但是,您的问题可能是您在Windows上构建,并且您的makefile是为UNIX / POSIX系统编写的。在POSIX shell中,:
命令是no-op命令,因此序列@:
表示不打印命令(make @
前缀),后跟shell do-nothing命令(:
)。我不知道为什么它在你的makefile中,但显然你正在使用的make版本没有调用POSIX shell,所以它不知道这个命令。