我在其中一个包含的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...
答案 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)
规则来构建。