Makefile 生成的先决条件不触发重建

Makefile 生成的先决条件不触发重建,makefile,Makefile,我有以下生成文件: .PHONY: version OBJECTS = $(C_SOURCES:.c=.o) %.o: %.c Makefile version.h $(call make_dir,$(dir $@)) $(CC) -c $(CFLAGS) $< -o $@ version.h: version version: $(PYTHON_EXE) build/version.py .PHONY:version 对象=$(C_源:.C=.o) %.

我有以下生成文件:

.PHONY: version

OBJECTS = $(C_SOURCES:.c=.o)

%.o: %.c Makefile version.h
    $(call make_dir,$(dir $@))
    $(CC) -c $(CFLAGS) $< -o $@

version.h: version

version:
    $(PYTHON_EXE) build/version.py
.PHONY:version
对象=$(C_源:.C=.o)
%.o:%.c生成文件版本.h
$(调用make_dir,$(dir$@))
$(CC)-c$(CFLAGS)$<-o$@
版本。h:版本
版本:
$(PYTHON_EXE)build/version.py
version.h
包含当前git提交哈希<如果当前git提交哈希不同,则code>build/version.py会更新
version.h
(如果提交哈希相同,则不会更改)


每次运行
make
时,我都要运行
build/version.py
,因此.h版总是最新的。这目前正在工作,但如果.h版更改,则不会重新编译我的对象文件。下次运行make时,它们会被重新编译。

这是因为
version.h
没有与之关联的实际规则,而另一个目标告诉make it builds
version
,而不是
version.h
。因此,make认为
version.h
实际上没有改变

给它一个配方,甚至是一个空配方,这样make就会明白它可能已经改变了:

version.h: version ;
(分号添加了一个空配方)