1

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

1 回答 1

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

于 2012-07-18T20:25:32.530 回答