2009-12-18 8 views
0

J'ai un makefile qui a des déclarations comme ci-dessous:le débogage d'un makefile

TOPICS = dmic 
SRV_MODE = 
ifeq "$(SRV_FLAG)" "ON" 
     SRV_MODE = 2 
endif 
vpath d%_srv.h $(CNT_PATH) 

USER_PRE_TARGETS := $(foreach topic,$(TOPICS),$(topic)_srv.h) 

dmic_srcs = $(wildcard $(CCWSCA)/dmic/src/*.c) \ 
       $(wildcard $(CCWSCA)/dmic/src/*.ppc) 

dmic_srv.h: $(dmic_srcs) 
     srvgen dmic $(SRV_MODE) 

users_topic = 
users_topic := $(shell ls -tr $(CCWPA)/$(CCBB)/Makefile.pre* | \ 
     tail -1 | awk 'BEGIN{FS="Makefile.pre."}{printf("%s\n", $$2);}') 

USER_PRE_TARGETS := $(foreach topic,$(users_topic),d$(topic)_srv.h) 

Après je lance la construction, je reçois des messages comme ceux ci-dessous:

gmake: Entering directory `/veluser2/vel/abp/bvijays/proj/c9mi790V64OG/cmi9dl' 
echo dmic 
dmic 
srvgen dmic 2 
Working on directory : /veluser2/vel/abp/bvijays/bb/cmi9dl/v79_0/dmic/src 
Working on directory : /velhome/vel/ccvel/ccvel/bb/cmi9dl/v79_0/dmic/src 
foreach: No match. 
gmake: *** [ddmic_srv.h] Error 1 
gmake: Target `pre' not remade because of errors. 
gmake: Leaving directory `/veluser2/vel/abp/bvijays/proj/c9mi790V64OG/cmi9dl' 

Il semble qu'il y ait un problème avec la commande foreach émise? Comme je suis nouveau à ces makefiles, quelqu'un pourrait-il suggérer comment déboguer le makefile?

+0

'outil qui make' utilisez-vous? Il existe un standard * defacto * mais beaucoup ont des extensions spécialisées. BTW l'exemple montre 'gmake', mais cela pourrait être n'importe quoi. –

+0

@Thomas: gmake est usuall GNU make, et avec les 's et '$ (foreach)'' '$ (génériques)' s dans là, il vaut mieux être ... – dmckee

Répondre

1

Ceci est un peu un gâchis, et il est difficile à diagnostiquer sans en savoir plus sur l'environnement, il est en cours d'exécution. Mais LÂCHE avec quelques notions de base:

  • Vous avez défini que sur la cible (dmic_srv.h), de sorte que lorsque vous exécutez GNU make sans arguments, il utilisera cette cible.
  • Faire l'en-tête dépendent des fichiers source est très inhabituelle, je doute que ce soit ce que vous voulez que cela fasse. mais vous générez du code, donc vous êtes OK.
  • Il existe deux types différents d'affectation dans GNU make. Plain = a l'évaluation paresseux, mais := forces d'évaluation immédiate. Cela affecte l'environnement dans lequel vous travaillez.
  • Vous avez deux définitions de USER_PRE_TARGETS, mais ne l'utilisez jamais nulle part. Ajouté: Étant donné que toutes les commandes $(foreach) existent dans ces définitions, vous pouvez simplement les supprimer et voir si elles s'améliorent.
+0

ma préoccupation est fondamentalement le fichier ddmic_srv.h devrait être généré quand je lance ce fichier make.this make fonctionne correctement en générant le fichier ddmic_srv.h sur l'un des serveurs mais pas sur le serveur où j'en ai besoin. J'ai donc collé la partie du fichier make où le code pour générer le Le fichier ddmic_srv.h est censé être généré. Il y a un problème avec le code ou une certaine configuration. Mais je n'arrive pas à le comprendre exactement. – Vijay