GNU Make忽略除第一个之外的所有规则

时间:2016-08-10 08:24:52

标签: c gnu-make

我有一个包含大量源文件的项目,其中一些(但不是全部)必须在更改一个特定的* .h文件后重建(currtype.h)。我的makefile中有明确的规则:

%.obj: %.c
    $(COMPILE)

main.obj: main.c currtype.h
    $(COMPILE)
CustomHTTPApp.obj: CustomHTTPApp.c currtype.h
    $(COMPILE)
CustomSNMPApp.obj: CustomSNMPApp.c currtype.h
    $(COMPILE)

COMPILE = -"$(CC)" -C $< $(CFLAGS) $(INCLUDE_STACK)

但是我改变了我的currtype.h,我看到只有main.c被重新编译。如果我将CustomHTTPApp放在第一行,而main.c放在第二行,则只重新编译CustomHTTPApp等。如何解决这个问题?

1 个答案:

答案 0 :(得分:3)

如果您只运行“make”,则会执行第一个非隐式规则,它只构建main.obj。您需要添加另一个构建所有输出文件的目标,例如叫“全部”:

all: main.obj CustomHTTPApp.obj CustomSNMPApp.obj

%.obj: %.c
    $(COMPILE)

main.obj: main.c currtype.h
    $(COMPILE)
CustomHTTPApp.obj: CustomHTTPApp.c currtype.h
    $(COMPILE)
CustomSNMPApp.obj: CustomSNMPApp.c currtype.h
    $(COMPILE)

COMPILE = "$(CC)" -C $< $(CFLAGS) $(INCLUDE_STACK)