标题更改时重建对象文件

时间:2016-12-03 17:23:33

标签: makefile gnu-make

我的Makefile中有以下规则:

%.o:        $(HFILES)

%.o:        %.c
    $(CC) $(CFLAGS) $*.c

其中HFILES包含我项目的所有标题。

问题是,当标题按预期更改时,这不会重建目标文件。为什么第一行不将标题添加到目标文件的先决条件中?

1 个答案:

答案 0 :(得分:2)

因为那不是模式规则的工作方式。模式规则的文档说明当您创建一个没有配方的模式规则时,取消模式规则(即删除它)。

由于您的第一行是创建一个目标为%.o且先决条件$(HFILES)但没有配方的模式规则,因此该行只会取消模式规则(无论如何都不存在)。< / p>

你可以写:

%.o: %.c $(HFILES)
         $(CC) $(CFLAGS) -c -o $@ $<

(您不应该在-c变量中添加CFLAGS标记。

请注意,当然,这意味着如果HFILES中的任何头文件发生更改,则将重建使用此模式的所有 .o文件。