makefile递归-q模式错误1

makefile递归-q模式错误1,makefile,gnu-make,Makefile,Gnu Make,我试图运行“问题模式”的递归调用,但在一个非常独特的场景中出现了一个错误 我使用的是Make3.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]

我试图运行“问题模式”的递归调用,但在一个非常独特的场景中出现了一个错误

我使用的是Make3.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)的调用上方有一个额外的行,即:

问题消失了,依赖项(在我的完整测试用例中)仍然有效。直接使用make似乎也会改变行为(与$(make)相反)

任何帮助都将不胜感激。 谢谢
Nachum

您的问题是在指定的
-q
选项周围漫游<代码>-q将不运行任何命令,但如果是最新的,则给出退出状态。使用
${MAKE}
MAKE-q-csub/a执行。经过少量的排列和组合,我发现我们不能将
-q
-C
选项一起使用。如果您想要完全,请使用
make--quite
,或者如果您只想检查时间戳,请尝试使用
-t
(触摸但不编译)或“-n”(干运行)

可能是,也可能有原因,我们还需要探索:)
makefile:
a:
        @echo hi
        $(MAKE) -C sub/a