makefile - 如何防止 'make clean' 构建计划删除的文件

标签 makefile gnu-make

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

相关文章:

makefile - 构建具有多个目标的多个文件

build-process - 了解构建 Linux 内核时要编译的文件

c++ - 将选定的文件传递给 Eclipse 中的 Make 目标

linux - make在不同的linux下有不同的表现吗?

linux - Makefile Linux如何为每个变量执行函数

makefile - 不同目录中文件的模式规则?

linux - 我如何初始化然后在 linux makefile 中迭代数组?

c++ - GNU make 有时不在 VPATH 中声明的文件夹中搜索

makefile - make echo 在生成的文件中包含引号

linux - makefile if/else 中的 Shell 循环语法