97 votes

"plusieurs modèles de cibles" Erreur de Makefile

Mon makefile échoue avec une erreur:

 Makefile:34: *** multiple target patterns.  Stop.
 

Qu'est-ce que cela signifie vraiment, comment puis-je résoudre ce problème?

(Le manuel de fabrication de GNU , écrit par Captain évident, n’aide pas).


Je l'ai trouvé J'ai eu la règle en forme:

 $(FOO): bar
 

FOO été défini à partir d'une commande shell qui l'a pollué avec un message d'erreur contenant deux points.

69voto

mcr Points 2857

Je l'avais sur le Makefile

 MAPS+=reverse/db.901:550:2001.ip6.arpa 
lastserial:  ${MAPS}
    ./updateser ${MAPS}
 

C'est à cause des : du nom de fichier. J'ai résolu ça avec

                      -------- remarquer
                     / /
                    vv
MAPS + = reverse / db.901 \: 550 \: 2001.ip6.arpa
dernière série: $ {MAPS}
    ./updateser $ {MAPS}

30voto

demongolem Points 3521

En plus d'avoir à échapper aux deux points, comme dans la réponse initiale, j'ai découvert que si l'indentation était éteinte, vous pourriez potentiellement rencontrer le même problème. Dans un makefile, je devais remplacer les espaces par une tabulation, ce qui me permettait de dépasser l'erreur.

4voto

Sean McClain Points 31

Je veux juste ajouter que, si vous recevez ce message, car vous êtes en utilisant Cygwin faire et auto-généré les fichiers, vous pouvez le fixer avec la suivante de sed,

sed -e 's@\\\([^ ]\)@/\1@g' -e 's@[cC]:@/cygdrive/c@' -i filename.d

Vous devrez peut-être ajouter plus de caractères que juste de l'espace à l'évasion dans la liste premier remplacement, mais vous obtenez l'idée. Le concept ici est que /cygdrive/c est un alias pour c: que cygwin faire reconnaîtra.

Et peut ainsi jeter dans

-e 's@^ \+@\t@'

juste au cas où vous ne commencez avec des espaces de l'accident (bien que j' /penser/ cela en général, un "manque de séparateur d'erreur").

0voto

Trebor Rude Points 417

J'ai eu ce problème (deux points dans le nom de la cible) parce que j'avais -n dans ma variable d'environnement GREP_OPTIONS . Apparemment, cela a causé configure à générer le Makefile manière incorrecte.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X