第二次没有规则使目标工作

时间:2017-07-27 09:06:32

标签: makefile gnu-make

我在其中一个包含的Makefile中是%.kt_rfgw的规则。当我第一次编译时,有No rule to make target但它失败了。但是当我第二次没有做任何更改时,它会找到规则,除了网络服务器不需要重建。


生成文件:

TARGET:=kt_rfgw

all: webserver gateway

webserver:
  ...doing stuff...

gateway: $(CONTIKI_PROJECT).$(TARGET)
  ...doing stuff...

在Makefile.Include中:

$(warning Rule: "%.kt_rfgw:" found)%.$(TARGET): %.co $(PROJECT_OBJECTFILES) $(PROJECT_LIBRARIES) contiki-$(TARGET).a
...doing stuff...




第一次出错时出现错误消息:

/c/...path.../Makefile.include:316: Rule: "%.kt_rfgw:" found
...
make[1]: *** No rule to make target `regelfern.kt_rfgw', needed by `gateway'.  Stop.

第一次做的时候没有消息:

/c/...path.../Makefile.include:316: Rule: "%.kt_rfgw:" found
...
...compiling...

1 个答案:

答案 0 :(得分:0)

您可能忘了告诉make webserver规则构建$(CONTIKI_PROJECT).$(TARGET)。因此,在第一次调用时,当make解析Makefile时,它会发现它需要它来构建目标gateway,它抱怨它不知道如何构建这个先决条件。然后,它会尽其所能,即执行创建webserver的{​​{1}}规则(但为时已晚)。在第二次调用时,它仍然不知道如何构建$(CONTIKI_PROJECT).$(TARGET),但因为它已经存在,一切都很好。

作为一个快速而肮脏的黑客尝试,也许,添加:

$(CONTIKI_PROJECT).$(TARGET)

告诉make $(CONTIKI_PROJECT).$(TARGET): webserver 可以通过执行$(CONTIKI_PROJECT).$(TARGET)规则来构建。