2010-01-20 11 views
54

Mi makefile falla con el error:"múltiples patrones de destino" error Makefile

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

Lo que significa realmente, ¿cómo puedo solucionar este problema?

(GNU make manual, escrito por Captain Obvious, no está ayudando).


Obtenido. Tenía regla en forma:

$(FOO): bar 

donde FOO se estableció a partir de comando shell que contaminó con mensaje de error que contenía un colon.

+0

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

+2

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

+0

Estas respuestas son solo paráfrasis de "tienes múltiples patrones objetivo". Bueno, creo que no. ¿Cómo puedo verificarlo? ¿Qué puede desencadenarlo? ¿Qué precauciones son necesarias para prevenir este problema? – Kornel

Respuesta

41

Lo tenía en el Makefile

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

Es debido a la : en el nombre del archivo. He resuelto esto con

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

tengo el mismo problema, pero no entiendo su respuesta, ¿me lo explicará más detalladamente, –

+0

me recibes? –

+2

@PirFahimShah La respuesta es afirmar que los dos puntos en el nombre del archivo (db.901: 550: 2001.ip6.arpa) deben ser escapados. mcr está escapando de los dos puntos al poner una barra invertida delante de ellos. De esa forma, make no interpreta los dos puntos como un símbolo especial. – Aaron

7

Además de tener que escapar dos puntos como en la respuesta original, he encontrado que si el sangrado es fuera usted podría conseguir el mismo problema. En un archivo MAKE, tuve que reemplazar espacios con una pestaña y eso me permitió pasar el error.

+0

GNU make también puede informar "No Rule for Target" en este caso. – davenpcj

4

sólo quiero añadir, si se obtiene este error porque está utilizando Cygwin hacer y archivos generados automáticamente, se puede arreglar con el siguiente sed,

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

Es posible que necesite añadir más personajes que simplemente espacio a la lista de escape en la primera sustitución , pero se entiende la idea. El concepto aquí es que/cygdrive/c es un alias para c: que la marca de cygwin reconocerá.

Y puede así lanzar en

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

en caso de que empezó con espacios en accidente (aunque yo/que/ esto por lo general ser un error de "separador perdido").

0

Tuve este problema (dos puntos en el nombre de destino) porque tenía -n en mi variable de entorno GREP_OPTIONS. Aparentemente, esto causó configure para generar el Makefile incorrectamente.

2

Me encontré con el mismo error. Después de luchar, descubrí que era debido a "Espacio" en el nombre de la carpeta.

Por ejemplo:

A principios de mi nombre de la carpeta fue: "Proyectos Qt"

Más tarde lo cambió a: "QtProjects"

y mi problema se resolvió.

Es muy simple, pero a veces un problema importante.

Cuestiones relacionadas