【发布时间】:2012-07-17 05:23:59
【问题描述】:
如果我运行 make clean 两次,第二次调用将构建计划删除的依赖 Makefile。如何让 Makefile 识别计划删除的文件并跳过为该目录进行的递归调用?换句话说,如果makefile已经存在于每个子目录中,则仅在子目录中进行清理,基于每个子目录。我不知道 GNU-Make 语法,但我正在寻找类似的东西:
Dependencies=[dependency1,dependency2,dependency3,dependency4]
DoNotMake=[bool1,bool2,bool3,bool4]
for all (i < 4):
if (! Dependencies(i)/Makefile):
DoNotMake(i)=true
make clean 目前的规则如下:
.PHONY: clean
clean:
$(MAKE) MAKEDEPEND=off SUBDIR_ARGS=clean
rm -f dependency1/Makefile
rm -f dependency2/Makefile
rm -f dependency3/Makefile
rm -f dependency4/Makefile
rm -f dependency4/src/config.h.in
【问题讨论】:
-
Makefile 的其他部分正在通过递归
$(MAKE)调用进行调用。我们无法分析那里发生了什么,因为您尚未发布 Makefile 代码的这些部分。 -
您想要一致性,还是想要不构建文件?为什么配方中有
$(MAKE),你希望它做什么? -
@tripleee:我正在寻找依赖生成文件以响应您的问题,发现它们不存在,这对我来说是一个很大的线索(Duh,运行“make clean”会显式删除它们!)谜题的后半部分通过您的声明解决了,即通过 $(MAKE) 调用依赖生成文件。因此,对“make clean”的第二次调用必须构建生成文件以运行递归调用,然后才能删除它们!
-
现在的问题是:如何防止“make clean”构建稍后将被删除的makefile?
-
没有您的代码可看,我们还能说什么比“不要那样做”?