makefile递归-q模式错误1
我试图运行“问题模式”的递归调用,但在一个非常独特的场景中出现了一个错误 我使用的是Make3.81,它已经在两个完全不同的环境中进行了测试 我调用“make-q”,然后makefile调用“$(make)-C sub/a/”,然后makefile调用“$(make)-f../。/makefile.b” 测试用例尽可能简单。有人能告诉我为什么会出现这个错误吗: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]
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