如果我运行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
目前的清洁规则如下:
.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
答案 0 :(得分:1)
我不能给你一个明确的答案,因为还有很多你没有发布的makefile,但我们采取了一些措施来解决类似的问题。
make变量MAKECMDGOALS
包含当前的make目标。如果你想在运行make clean
时避免做某事,你可以这样做:
ifeq (,$(findstring $(MAKECMDGOALS),clean))
# Whatever you place here won't be run when you run 'make clean'
endif
您还可以添加一些shell脚本,以便仅在存在时调用子makefile:
some_target:
[ -f $(SUB_FOLDER)/Makefile ] && $(MAKE) -C $(SUB_FOLDER)
如果您的makefile是隐式创建的,那么这些可能无效。您可以使用--assume-old=
选项来阻止make重新构建makefile(我从未尝试在不存在的文件上使用它,因此YMMV)。