有人可以阐明这里的区别吗:
$(tsdir)/proj具有先决条件$(tsdir)/proja和$(tsdir)/projb. 我希望每次构建时都调用proja's 和's makefile 。如果或已过时且已更新,则它们的 makefile 将分别触及和。如果这些文件比 更新,则重建 proj。projbprojprojaprojb$(tsdir)/proja$(tsdir)/projb$(tsdir)/proj
我通过使用下面的代码和FORCE目标来完成此工作。如果我尝试切换到使用.PHONY目标,这是行不通的。我更喜欢.PHONY,因为这被认为是更“正确”的做法。但它不起作用,我不知道为什么。proja's 和projb's 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)/$*
Run Code Online (Sandbox Code Playgroud)
.PHONY目标应该代表任务,而不是真实的文件,其中隐式规则搜索仅适用于文件。因此,无法使用隐式规则构建虚假目标。
来自“虚假目标”章节:
由于它知道虚假目标不会命名可以从其他文件重新制作的实际文件,因此
make会跳过对虚假目标的隐式规则搜索
在你的情况下,我只会使用显式规则,可能使用静态模式:
.PHONY: $(addprefix $(tsdir)/, $(projects))
$(addprefix $(tsdir)/, $(projects)) : $(tsdir)/% :
make -C $(prereqdir)/$*
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2641 次 |
| 最近记录: |