我正在尝试运行“问题模式”的递归调用,但在一个非常独特的场景中出现错误。
我使用的是 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
这个练习的重点是能够检查是否需要重新编译子项目,以便我可以在必要时正确构建顶级项目。否则我必须对所有内容使用时间戳。(我以前使用过时间戳,但我意识到这会给其他事情带来额外的混乱。)
这个问题有一些奇怪的解决方法。例如,如果(在 makefile 中)的配方在对 $(MAKE) 的调用上方有一个附加行,即:
makefile:
a:
@echo hi
$(MAKE) -C sub/a
问题消失了,并且依赖项(在我的完整测试用例中)仍然有效。也直接使用 make 似乎会改变行为(与 $(MAKE) 相反)。
任何帮助,将不胜感激。谢谢, 纳楚姆