我正在开发一个启动项目。在我的启动根目录中有一个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
未在构建中获得touch
(它未获得更新)
试图理解我玩过的行为 -
我尝试了touch
$(TOP_DIR)/boot
,和/或在项目的任何位置尝试touch
和创建文件xboot
文件,但行为保持不变。
GNU Make 4.1 专为x86_64-pc-linux-gnu而打造
答案 0 :(得分:0)
Y.Z()
并不总是按照您期望的方式处理文件夹依赖项。
应该在make
$(TOP_DIR)/boot
内使用文件依赖关系,或者更好的是,使用$(wildcard ...)
函数的所有源文件。
像:
$(TOP_DIR)/boot/.exists
这将仅在代码更改时导致重建。