Error de Makefile de "múltiples patrones de destino"


82

Mi archivo MAKE falla con el error:

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

¿Qué significa realmente, cómo puedo solucionar esto?

( GNU make manual , escrito por Captain Obvious, no ayuda).


Lo encontré. Tenía regla en forma:

$(FOO): bar

donde FOOse estableció desde el comando de shell que lo contaminó con un mensaje de error que contenía dos puntos.




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

2
Todo estaba funcionando en un minuto y luego mi guión estornudó un (punto y coma) ... jeje. Sudado tratando de encontrar el problema durante al menos 3 horas antes de encontrar su respuesta y la de @mcr. ¡¡Me acabas de ahorrar un balde de sudor !!
GuruM

La verdadera causa raíz de este problema es que GNU Make es un horrible pedazo de estiércol que debería haber muerto hace décadas.
antred

Respuestas:


62

Lo tenía en el Makefile

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

Es por :el nombre del archivo. Resolví esto con

                      -------- darse cuenta
                     / /
                    vv
MAPAS + = reverso / db.901 \: 550 \: 2001.ip6.arpa
última serie: $ {MAPS}
    ./updateser $ {MAPS}

1
Tengo el mismo problema, pero no entiendo tu respuesta, ¿me explicarás esto más a fondo?
Pir Fahim Shah

4
@PirFahimShah La respuesta indica que los dos puntos en el nombre del archivo (db.901: 550: 2001.ip6.arpa) deben escaparse. mcr está escapando de los dos puntos colocando una barra invertida delante de ellos. De esa forma, make no interpreta los dos puntos como un símbolo especial.
Loduwijk

1
Gracias, funcionó para mí. Tenía una ruta de Windows antigua con dos puntos ( C:/Qt/5.8/mingw53_32/bin/rcc.exe) en una de las reglas de Makefile. Elimine esos archivos MAKE generados automáticamente si está compilando en una máquina Linux
Vadim Kotov

Windows make cambió a wsl (ubuntu) y obtuvo este error, make cleanseguido de lo makeresuelto. La línea errónea era_build/nrf52840_xxaa/app_mpu.c.o: ../../../app_mpu.c \
Tyeth

22

Además de tener que escapar de los dos puntos como en la respuesta original, descubrí que si la sangría está apagada, podría tener el mismo problema. En un archivo MAKE, tuve que reemplazar los espacios con una pestaña y eso me permitió superar el error.


GNU make también puede informar "Sin regla para el objetivo" en este caso.
davenpcj

4

Solo quiero agregar, si recibe este error porque está usando Cygwin make y archivos generados automáticamente, puede solucionarlo con el siguiente sed,

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

Es posible que deba agregar más caracteres que solo espacio a la lista de escape en la primera sustitución, pero se hace una idea. El concepto aquí es que / cygdrive / c es un alias para c: que la marca de cygwin reconocerá.

Y también puede lanzar

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

por si acaso empezaste con espacios por accidente (aunque creo que esto suele ser un error de "separador faltante").


3

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

Por ejemplo :

Anteriormente, el nombre de mi carpeta era: "Proyectos Qt"

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

y mi problema se resolvió.

Es muy simple pero a veces un problema importante.


0

Tuve este problema (dos puntos en el nombre de destino) porque tenía -nen mi GREP_OPTIONSvariable de entorno. Aparentemente, esto provocó configureque se generara Makefileincorrectamente.


0

Mi IDE dejó una combinación de espacios y pestañas en mi Makefile.

Configurar mi Makefile para usar solo pestañas solucionó este error para mí.


0

También recibí este error (dentro del STM32CubeIDE basado en Eclipse en Windows).

Después de hacer doble clic en el error "múltiples patrones de destino", mostró una ruta a un .ldarchivo. Resulta ser otro problema de "carácter ilegal". El personaje ofensor fue el (espere): =

Heurística de la semana: use solo [a..z] en sus rutas, ya que seguramente habrá otros caracteres ilegales </vomit>.

El manual de GNU make no documenta esto explícitamente.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.