2010-01-20 3 views
54

Mon makefile échoue avec l'erreur:« plusieurs modèles cibles » d'erreur Makefile

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

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

(GNU make manual, écrit par Captain Obvious, n'aide pas).


Trouvé. J'avais règle sous forme:

$(FOO): bar 

FOO a été mis de commande shell qui a pollué avec le message d'erreur qui contenait deux points.

+0

est-ce que http://www-01.ibm.com/support/docview.wss?uid=swg21119863 ou http://sourceware.org/ml/crossgcc/2009-07/msg00006.html aide? –

+2

Un rapide google révèle http://groups.google.com/group/gnu.utils.help/browse_frm/thread/d7eeff06e2b8394/1c932a7ea7664ade?lnk=st&q=%22multiple+target+patterns%22&rnum=7#1c932a7ea7664ade –

+0

Ces réponses sont juste des paraphrases de "vous avez plusieurs modèles de cible". Eh bien, je pense que non. Comment puis-je le vérifier? Qu'est-ce qui peut le déclencher? Quelles précautions sont nécessaires pour éviter ce problème? – Kornel

Répondre

41

je l'avais sur le Makefile

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

Il est à cause de la : dans le nom du fichier. Je résolu ce problème avec

 
         -------- notice 
        //
        v v 
MAPS+=reverse/db.901\:550\:2001.ip6.arpa 
lastserial: ${MAPS} 
    ./updateser ${MAPS} 
+0

J'ai le même problème, mais je ne comprends pas votre réponse, allez-vous élaborer plus loin pour moi, –

+0

vous me recevez? –

+2

@PirFahimShah La réponse est que les deux-points du nom de fichier (db.901: 550: 2001.ip6.arpa) doivent être échappés. mcr échappe aux colons en mettant une barre oblique inverse avant eux. De cette façon, make n'interprète pas les deux-points comme un symbole spécial. – Aaron

7

En plus d'avoir à échapper comme dans la côlons réponse originale, je l'ai trouvé si le retrait est éteint, vous pourriez potentiellement obtenir le même problème. Dans un makefile, j'ai dû remplacer les espaces par une tabulation et cela m'a permis de dépasser l'erreur.

+0

GNU make peut également signaler "No Rule for Target" dans ce cas. – davenpcj

4

Je veux juste ajouter, si vous obtenez cette erreur parce que vous utilisez Cygwin faire et fichiers générés automatiquement, vous pouvez fixer avec la sed suivante,

sed -e '[email protected]\\\([^ ]\)@/\[email protected]' -e '[email protected][cC]:@/cygdrive/[email protected]' -i filename.d 

Vous devrez peut-être ajouter plus caractères que juste l'espace à la liste d'échappement dans la première substitution mais vous avez l'idée. Le concept ici est que/cygdrive/c est un alias pour c: que la marque de cygwin reconnaîtra.

Et peut ainsi jeter dans

-e '[email protected]^ \[email protected]\[email protected]' 

juste au cas où vous ne commencez avec des espaces sur les accidents (bien que je/pense/cela est généralement une erreur « séparateur manquant »).

0

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

2

J'ai rencontré la même erreur. Après avoir lutté, j'ai trouvé que c'était dû à "Espace" dans le nom du dossier.

Par exemple:

Plus tôt, mon nom de dossier était: "Projets Qt"

plus tard je l'ai changé: "QtProjects"

et mon problème a été résolu.

C'est très simple mais parfois un problème majeur.

Questions connexes