2010-01-20 8 views
54

mio makefile non riesce con l'errore:"più pattern di destinazione" errore Makefile

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

Cosa significa veramente, come posso risolvere questo problema?

(GNU make manual, scritto da Capitan Ovvio, non sta aiutando).


Trovato. Ho avuto regola in forma:

$(FOO): bar 

dove FOO è stato fissato dal comando di shell che ha inquinato con messaggio di errore che contiene i due punti.

+0

fa http://www-01.ibm.com/support/docview.wss?uid=swg21119863 o http://sourceware.org/ml/crossgcc/2009-07/msg00006.html help? –

+2

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

+0

Queste risposte sono solo parafrasi di "hai più modelli di target". Beh, penso di no. Come posso controllarlo? Cosa può innescarlo? Quali precauzioni sono necessarie per prevenire questo problema? – Kornel

risposta

41

ho avuto sul Makefile

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

E 'a causa della : nel nome del file. Ho risolto questo con

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

Ho lo stesso problema, ma non capisco la tua risposta, la elaborerai ulteriormente per me, –

+0

mi stai prendendo? –

+2

@PirFahimShah La risposta sta affermando che i due punti nel nome file (db.901: 550: 2001.ip6.arpa) devono essere sottoposti a escape. mcr sta sfuggendo ai due punti inserendo un backslash davanti a loro. In questo modo, make non interpreta i due punti come un simbolo speciale. – Aaron

7

Oltre a dover fuggire i due punti come nella risposta originale, ho trovato se il rientro è spento si potrebbe ottenere lo stesso problema. In un makefile, ho dovuto sostituire gli spazi con una scheda e questo mi ha permesso di superare l'errore.

+0

GNU make potrebbe anche riportare "Nessuna regola per Target" in questo caso. – davenpcj

4

Voglio solo aggiungere, se si ottiene questo errore perché si sta utilizzando Cygwin fare e file generati automaticamente, è possibile risolvere il problema con il seguente sed,

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

Potrebbe essere necessario aggiungere più caratteri che non solo spazio alla lista di escape nella prima sostituzione ma si ottiene l'idea. Il concetto qui è che/cygdrive/c è un alias per c: che la marca di cygwin riconoscerà.

E può anche gettare in

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

solo nel caso in cui hai fatto iniziare con spazi a infortuni (anche se io/credo/questo sarà solito è un errore di "separatore mancante").

0

Ho avuto questo problema (due punti nel nome di destinazione) perché avevo -n nella mia variabile di ambiente GREP_OPTIONS. Apparentemente, questo ha causato configure per generare il Makefile in modo errato.

2

Ho incontrato lo stesso errore. Dopo aver lottato, ho scoperto che era dovuto a "Spazio" nel nome della cartella.

Ad esempio:

All'inizio mio nome della cartella era: "qt Progetti"

Più tardi ho cambiato in: "QtProjects"

e il mio problema è stato risolto.

È un problema molto semplice ma a volte importante.

Problemi correlati