如果我运行 make clean 两次,第二次调用将构建计划删除的依赖项 Makefile。如何让 Makefile 识别计划删除的文件并跳过对该目录进行 make 的递归调用?换句话说,如果 makefile 已存在于每个子目录中,则仅在子目录中进行 clean(基于每个子目录)。我不知道 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 变量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 )。
关于makefile - 如何防止 'make clean' 构建计划删除的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11516451/