我的Makefile中有以下规则:
%.o: $(HFILES)
%.o: %.c
$(CC) $(CFLAGS) $*.c
其中HFILES
包含我项目的所有标题。
问题是,当标题按预期更改时,这不会重建目标文件。为什么第一行不将标题添加到目标文件的先决条件中?
答案 0 :(得分:2)
因为那不是模式规则的工作方式。模式规则的文档说明当您创建一个没有配方的模式规则时,取消模式规则(即删除它)。
由于您的第一行是创建一个目标为%.o
且先决条件$(HFILES)
但没有配方的模式规则,因此该行只会取消模式规则(无论如何都不存在)。< / p>
你可以写:
%.o: %.c $(HFILES)
$(CC) $(CFLAGS) -c -o $@ $<
(您不应该在-c
变量中添加CFLAGS
标记。
请注意,当然,这意味着如果HFILES
中的任何头文件发生更改,则将重建使用此模式的所有 .o
文件。