gpt4 book ai didi

makefile - 使用 force 与 .phony 制定隐式规则

转载 作者:行者123 更新时间:2023-12-01 11:46:04 26 4
gpt4 key购买 nike

有人可以阐明这里的区别吗:

$(tsdir)/proj 具有先决条件 $(tsdir)/proja$(tsdir)/projb。我希望每次必须构建 proj 时调用 projaprojb 的 makefile。如果 projaprojb 已过时并已更新,则它们的 makefile 将触及 $(tsdir)/proja$( tsdir)/projb 分别。如果这些文件比 $(tsdir)/proj 新,则重建 proj。

我通过使用下面的代码和 FORCE 目标来实现这一点。如果我尝试切换到使用 .PHONY 目标,这是行不通的。我更喜欢 .PHONY,因为据说这是更“正确”的做法。但它不起作用,我不知道为什么。 projaprojb 的 makefile 未使用 .PHONY 目标调用,但 proj 已重建。

我正在使用 GNU make 3.81。

谢谢那鸿

$(tsdir)/proj: $(tsdir)/proja $(tsdir)/projb
...

$(tsdir)/%: FORCE
make -C $(prereqdir)/$*

FORCE:

#or

$(tsdir)/proj: $(tsdir)/proja $(tsdir)/projb
...

.PHONY: $(addprefix $(tsdir)/, $(projects))

$(tsdir)/%:
make -C $(prereqdir)/$*

最佳答案

.PHONY 目标应该代表任务,而不是真实文件,其中隐式规则搜索仅适用于文件。因此,无法使用隐式规则构建虚假目标。

来自 Phony Targets章节:

Since it knows that phony targets do not name actual files that could be remade from other files, make skips the implicit rule search for phony targets

在你的情况下,我会使用明确的规则,可能是 static pattern :

.PHONY: $(addprefix $(tsdir)/, $(projects))

$(addprefix $(tsdir)/, $(projects)) : $(tsdir)/% :
make -C $(prereqdir)/$*

关于makefile - 使用 force 与 .phony 制定隐式规则,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15170060/

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