2017-07-27 7 views
0

In einem meiner mitgelieferten Makefiles ist eine Regel für %.kt_rfgw. Wenn ich das erste Mal kompiliere, gibt es No rule to make target und es ist fehlgeschlagen. Aber wenn ich ein zweites Mal ohne Änderungen mache, wird es die Regeln finden, außer dass der Webserver nicht neu aufgebaut werden muss.keine Regel, damit das Ziel nach dem zweiten Mal funktioniert


Makefile:

TARGET:=kt_rfgw 

all: webserver gateway 

webserver: 
    ...doing stuff... 

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

In einem Makefile.Include:

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




Fehlermeldung beim ersten Mal machen:

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

No-Nachricht wann erstes Mal machen:

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

Bitte schließen Sie die Regel für '% .kt_rfgw' ein. Idealerweise streichen Sie alle unnötigen Dinge aus und erstellen ein [minimales, vollständiges und überprüfbares Beispiel] (https://stackoverflow.com/help/mcve). – l0b0

+0

'$ (TARGET)' ist '% .kt_rfgw', sorry – Chris

+0

Ich denke das Problem ist, dass das Ziel' Gateway' eine Datei benötigt, die vom Ziel 'webserver' erstellt wird. Aber erst zu Beginn wurden die Regeln für das Ziel "Gateway" überprüft. Kann man vor dem Start des zweiten Ziels noch einmal nachschauen? – Chris

Antwort

0

Sie wahrscheinlich machen vergessen zu sagen, dass die webserver Regel $(CONTIKI_PROJECT).$(TARGET) baut. Wenn make beim ersten Aufruf das Makefile analysiert, stellt es fest, dass es benötigt wird, um das Ziel gateway zu erstellen. Es beschwert sich, dass es nicht weiß, wie diese Voraussetzung aufgebaut wird. Dann macht es was es kann, das ist die webserver Regel, die $(CONTIKI_PROJECT).$(TARGET) (aber zu spät) erstellt. Beim zweiten Aufruf weiß es noch nicht, wie man $(CONTIKI_PROJECT).$(TARGET) baut, aber wie es schon da ist, ist alles in Ordnung.

Als quick and dirty Hack versuchen, um vielleicht hinzufügen:

$(CONTIKI_PROJECT).$(TARGET): webserver 

zu sagen, dass $(CONTIKI_PROJECT).$(TARGET) kann durch Ausführen der webserver Regel gebaut werden.

Verwandte Themen