如何防止“make clean”构建计划删除的文件

时间:2012-07-17 05:24:00

标签: makefile gnu-make

如果我运行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

1 个答案:

答案 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)。