我已经用Makefile定义了一系列数据处理步骤,但是发现属于中间步骤的文件被Make删除了。 在以下示例中,始终删除文件processed_%.txt

#make some simple data
#echo "test data X" > test_x.txt
#echo "test data y" > test_y.txt

x = test_x.txt
y = test_y.txt

#these are deleted
processed_%.txt: ${x} ${y}
        cat $< > $@

#these remain in the directory
processed_again_%.txt: processed_%.txt
        cat $< > $@

all: processed_again_x.txt processed_again_y.txt

谁能解释正在发生的事情以及如何禁用/控制此行为?

谢谢,zachcp

#1楼 票数:1 已采纳

这就是隐式规则链的工作方式。

第二个区别是,如果make确实创建b是为了更新其他内容,则它会在不再需要b之后删除b。 因此,在make之前不存在的中间文件在make之后也不存在。 make通过打印“ rm -f”命令向您报告删除,该命令显示了要删除的文件。

您可以通过将文件标记为.SECONDARY来控制此行为

您可以通过将中间文件标记为辅助文件来防止其自动删除。 为此,请将其列为特殊目标.SECONDARY的先决条件。 当文件为辅助文件时,make不会仅仅因为该文件不存在而创建该文件,而是make不会自动删除该文件。 将文件标记为辅助文件也将其标记为中间文件。

  ask by zach translate from so

未解决问题?本站智能推荐:

1回复

从makefile在build目录中创建中间文件

我必须使用 makefile 在 Ubuntu 终端中创建一个 XC8 项目。 目录结构是这样的 makefile 正在项目目录本身中生成中间文件。 实际上,makefile 将转到每个位置并为每个.c文件生成中间文件。 像这样 但我想在Project/build/lib/GPIO生成它们。 I
1回复

makefile“删除中间文件”只是有时

make 正在删除使用我自己的规则(不是隐式规则)创建的文件。 我有一个按预期工作的 makefile,如下所示: 这个 makefile 创建文件 assert.d assert.as assert.so.s assert.ao 和 assert.so.o 并且不删除它们: 然后我有另一个生成文
3回复

Makefile不删除中间文件

我的Makefile没有删除中间文件。 我已经设置了.INTERMEDIATE 。 这是我的Makefile: .INTERMEDIATE什么问题?
1回复

Makefile规则保存中间文件

为了调试复杂的XSLT转换,我将其分为几个部分:首先构建%.1.xml ,然后使用它构建%.2.xml ,最后构建%.3.xml 。 一切正常,但如果我要Make Make构建最后一个,那么Make总是删除中间的%.1.xml和%.2.xml ,而我宁愿保留它们。 我试图将所有.xml文件标
1回复

仅在成功时保留中间文件

我有中间文件,只有在它们成功生成时才想保留。 这是我目前的尝试: 为了让我痛苦地清楚我在追求什么,运行它并尝试不输出:
1回复

Make-让主Makefile将中间文件存储在特定于类型的temp文件夹中

我有500多行的Makefile,用于处理各种自动化构建。 在当前状态下,它规定了一些规则,并取决于所传递的参数,以make确定要建造一架构,即: 因此,例如,在构建服务器上,我可以为多个体系结构生成项目的tarball,如下所示: 我正在尝试并行化内部版本,以加快内部版本服务器向我提
1回复

Makefile:删除没有依赖性的中间文件

堆栈! 艰苦的实验和搜索还没有找到解决这个看似容易的问题的方法。 在我的构建中,.cc文件依赖于.proto文件。 在制作过程中,.proto文件将转换为.cc和.h文件,然后将其收集并构建为可执行文件。 如何确定删除.proto时,在生成过程中会自动删除相应的中间.cc文件?
1回复

中间文件没有真正更改时的Makefile改进

我有一个像这样的Makefile 事实是, .baz文件中的更改经常是次要的,即更改后产生的.bar文件与更改前相同(按内容或diff可以检测到)。 由于secondstep和finalstep (和可能的一些更多的中间步骤)是昂贵的 ,如果不足,在变化,这将是优选.bar文件可以被检测到