gpt4 book ai didi

makefile - 强制 make 从文件中查找过时的情况

转载 作者:行者123 更新时间:2023-12-04 18:18:54 24 4
gpt4 key购买 nike

(这与 GNU make: Execute target but take dependency from file 类似,但略有不同)。

当我尝试强制构建目标时,make 自动认为该目标已过时,并强制运行依赖于它的所有目标。

就我而言,目标是一个递归 make 调用,它做了很多工作,并且可能只是返回“无事可做”:

 .PHONY: intermediate.dat
intermediate.dat:
$(MAKE) expensive_chain_which_finally_creates_intermediate.dat

step1.dat: intermediate.dat
sleep 10

step2.dat: step1.dat
sleep 15

step3.dat: step2.dat
sleep 10

all: step3.dat
sleep 5

在这种情况下,“make all”运行了 40 秒,尽管 middle.dat 可能没有更改(递归 make 返回“无事可做”)。但是,如果递归make更新了intermediate.dat,则目标将过期。

真的没有办法吗?

最佳答案

使 intermediate.dat 依赖于虚假目标,而不是虚假目标本身。

 .PHONY : always-remake

intermediate.dat : always-remake

IIRC,上次我解决问题时,.PHONY 没有按预期工作,我使用了:

 always-remake :
@true

相反。但是,我不记得为什么,所以先尝试一下 .PHONY。

使 intermediate.dat 本身变得虚假的问题是 make 从不检查虚假文件的存在/日期,这是行为你要的那个。您只需要触发重建规则,这是由过时的先决条件完成的;虚假的先决条件总是过时的,所以它可以完成任务。

关于makefile - 强制 make 从文件中查找过时的情况,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11121000/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com