【发布时间】:2018-04-18 05:47:18
【问题描述】:
我正在做一个启动项目。在我的引导根目录中有一个 makefile,其中包含以下代码,这让我很困惑:
.DEFAULT_GOAL = all
.PHONY: all
all: xboot
xboot: $(TOP_DIR)/boot
@echo "Building Boot" $(TOP_DIR)
$(MAKE) -C $(TOP_DIR)/boot/src
现在,问题是,当通过调用make 执行此makefile 时任何 时间,xboot 收据始终 运行。看起来这个xboot 目标就像一个虚假目标。来自GNU Documentation 关于虚假目标:
虚假不会被继承:虚假目标的先决条件是 自己不是假的,除非明确声明是这样。
表示xboot 目标不是假的,但它的收据一直在运行。我找不到任何解释。
项目事实-
目录$(TOP_DIR)/boot 包含$(TOP_DIR)/boot/src 和$(TOP_DIR)/boot/include 下的源和标头,目录$(TOP_DIR)/boot 在构建时没有得到touched(它没有得到更新)
试图了解我玩弄的行为-
我尝试了touching $(TOP_DIR)/boot,和/或尝试了touching 并在项目的任何位置创建文件xboot,但行为保持不变。
GNU Make 4.1 为 x86_64-pc-linux-gnu 构建
【问题讨论】:
-
我假设实际上 is 是由该目标创建的
xboot文件?否则它将永远被重新制作。 -
@Someprogrammerdude 看看我的最后一句话——
Trying to understand the behavior I played around- I tried touching $(TOP_DIR)/boot, and/or tried touching and creating file xboot file anywhere on the projects, but behavior remains the same. -
它不应该在“[原文如此]项目的任何地方”,而是在与您显示的 makefile 相同的目录中。 并且它需要全新创建并且比
$(TOP_DIR)/boot更新。 而且让xboot依赖于一个目录 是没有意义的,而应该依赖于@ 创建的文件(或多个文件) 987654340@. -
@Someprogrammerdude 关于我尝试触摸的
xboot文件的所有情况 - 是的,我做了所有事情,但行为仍然没有改变。目录依赖对我也没有意义 -
尝试删除
$(TOP_DIR)/boot先决条件,看看问题是否仍然存在。如果是,则确认您的xboot规则包含命令touch $@,然后执行make -d。你会在屏幕上得到大量的输出;您可以对其进行筛选,如果仍然找不到问题,可以将其添加到您的问题中。