我想运行“问题模式”的递归调用,并在非常特殊的场景中出现错误。makefile递归-q模式错误1
我使用的是MAKE 3.81,这已经在两个完全独立的环境中测试过了。我调用“make -q”,然后makefile调用“$(MAKE)-C sub/a /”,然后makefile调用“$(MAKE)-f ../../makefile.b”
该测试用例尽可能简单。谁能告诉我,为什么我得到这个错误:
nachum:/home/nachum/makefile_bug[1497]$make -q
make -C sub/a
make[1]: Entering directory `/home/nachum/makefile_bug/sub/a'
make -f ../../makefile.b
make[1]: *** [b] Error 1
make[1]: Leaving directory `/home/nachum/makefile_bug/sub/a'
make: *** [a] Error 2
nachum:/home/nachum/makefile_bug[1498]$
下面是生成文件:
makefile:
a:
$(MAKE) -C sub/a
sub/a/makefile:
b:
$(MAKE) -f ../../makefile.b
makefile.b:
all:
echo hi
这个练习的要点是要能够检查是否子项目需要重新编译,所以我必要时可以正确构建顶级项目。否则,我必须使用时间戳的一切。 (我以前使用过时间戳,但是我意识到这对其他事情造成了额外的困惑。)
这个问题有一些奇怪的解决方法。例如,如果一个(在生成文件)的配方具有调用$以上的额外线(MAKE),即:
makefile:
a:
@echo hi
$(MAKE) -C sub/a
的问题消失了,而依赖关系(在我的全测试用例)仍能正常工作。也直接使用make似乎改变了行为(而不是$(MAKE))。
任何帮助,将不胜感激。 谢谢, Nachum
听起来像一个错误? – nachum 2013-03-24 19:10:46
可能有可能是原因,我们还需要探讨:) – 2013-03-25 11:08:52