2017-07-27 1 views
0

Dans l'un de mes Makefiles inclus est une règle pour %.kt_rfgw. Quand je compile d'abord, il y a No rule to make target et il a échoué. Mais quand je fais une seconde fois sans aucun changement, il trouve les règles, sauf que le serveur web n'a pas besoin de reconstruire.Aucune règle pour que la cible fonctionne après la deuxième fois


Makefile:

TARGET:=kt_rfgw 

all: webserver gateway 

webserver: 
    ...doing stuff... 

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

Dans un Makefile.Include:

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




Erreur-message quand ne faites première fois:

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

No-message quand ne fait première fois:

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

Veuillez inclure la règle pour '% .kt_rfgw'. Idéalement, éliminer toutes les choses inutiles et créer un [exemple minimal, complet et vérifiable] (https://stackoverflow.com/help/mcve). – l0b0

+0

'$ (TARGET)' est '% .kt_rfgw', désolé – Chris

+0

Je pense que le problème est, que la cible' passerelle 'a besoin d'un fichier qui sera créé par la cible 'webserver'. Mais seulement au tout début les règles ont été vérifiées pour la 'passerelle 'cible. Est-il possible de vérifier à nouveau avant de commencer la deuxième cible? – Chris

Répondre

0

Vous avez probablement oublié de te dire faire que la règle webserver construit $(CONTIKI_PROJECT).$(TARGET). Ainsi, lors de la première invocation, lors de make parse le Makefile, il découvre qu'il en a besoin pour construire la cible gateway, il se plaint de ne pas savoir comment construire ce pré-requis. Ensuite, il fait ce qu'il peut, c'est-à-dire exécuter la règle webserver, qui crée $(CONTIKI_PROJECT).$(TARGET) (mais trop tard). Sur la deuxième invocation, il ne sait toujours pas comment construire $(CONTIKI_PROJECT).$(TARGET), mais comme il est déjà là, tout va bien.

Comme essayer hack rapide et sale, peut-être, d'ajouter:

$(CONTIKI_PROJECT).$(TARGET): webserver 

pour dire que faire $(CONTIKI_PROJECT).$(TARGET) peut être construit en exécutant la règle webserver.