Estoy tratando de usar GCC (Linux) con un archivo MAKE para compilar mi proyecto.
Me sale el siguiente error que parece no poder descifrar en este contexto:
"No rule to make target 'vertex.cpp', needed by 'vertex.o'. Stop."
Este es el archivo MAKE:
a.out: vertex.o edge.o elist.o main.o vlist.o enode.o vnode.o
g++ vertex.o edge.o elist.o main.o vlist.o enode.o vnode.o
main.o: main.cpp main.h
g++ -c main.cpp
vertex.o: vertex.cpp vertex.h
g++ -c vertex.cpp
edge.o: edge.cpp edge.h
g++ -c num.cpp
vlist.o: vlist.cpp vlist.h
g++ -c vlist.cpp
elist.o: elist.cpp elist.h
g++ -c elist.cpp
vnode.o: vnode.cpp vnode.h
g++ -c vnode.cpp
enode.o: enode.cpp enode.h
g++ -c node.cpp
VPATH=
lugar deVPATH+=
. Esto hace que el archivo Makefile no pueda ver los archivos cuando el archivo realmente está allí.Respuestas:
Eso es generalmente porque no tiene un archivo llamado
vertex.cpp
disponible para hacer. Mira esto:Aparte de eso, no tengo mucho más que sugerir. Quizás podría darnos una lista de directorio de ese directorio.
fuente
En mi experiencia, este error es causado frecuentemente por un error ortográfico .
Recibí este error hoy.
En mi caso, el error fue simplemente un error de ortografía. La palabra MANTENIMIENTO faltaba es su tercer N.
También revise la ortografía de sus nombres de archivo.
fuente
gcc -MT
y gnu make patterns puede resolver esto. Ver también .../../src/file.c
pero en realidad lo estaba../../src/folder/file.c
La razón más común para que se imprima este mensaje es porque olvidó incluir el directorio en el que reside el archivo fuente. Como resultado, gcc "piensa" que este archivo no existe.
Puede agregar el directorio usando el argumento -I a gcc.
fuente
En mi caso, había usado comas descabelladas como separadores. Para usar su ejemplo, hice esto:
Cambiándolo al equivalente de
arreglado.
fuente
¿Es eso exactamente? Recuerde que la sintaxis de Makefile es consciente de los espacios en blanco y requiere pestañas para sangrar comandos bajo acciones.
fuente
El problema que encontré fue aún más tonto que lo que otras personas han mencionado.
Nuestros makefiles obtienen listas de cosas para construir. Alguien agregó
TheOtherLibrary
a una de las listas, como se muestra a continuación.Deberían haber hecho esto:
Si lo hubieran hecho de la segunda manera, no habrían eliminado la
Library
construcción. La ventaja en+=
es muy importante.fuente
En mi caso, se debió a un error de regla de varias líneas en el Makefile. Tenía algo como:
La barra invertida al final de la lista de archivos en
CONFIG_OBJ1
la regla de 'causó este error. Debería ser como:fuente
Uno de los errores frecuentes puede ser un error tipográfico en otro nombre de archivo .
Su ejemplo es bastante sencillo, pero lo que a veces puede confundir son mensajes en
make
sí mismos. Consideremos un ejemplo.El contenido de mi carpeta es:
Mientras que mi
makefile
pareceAunque tengo
index.md
dónde debería estar y no hay ningún error en el nombre, el mensaje demake
seráPara ser sincero, el mensaje es confuso . Simplemente dice que no hay una regla. De hecho, significa que la regla es incorrecta, pero debido a las reglas comodín (patrón)
make
no se puede determinar qué causó exactamente el problema.Vamos a alterar
makefile
un poco, es decir, reemplazar patrones con reglas explícitas:Y ahora el mensaje que recibiremos será:
¡Milagro! Se podría concluir lo siguiente:
Los mensajes de
make
dependen de reglas y no siempre apuntan a la raíz de los problemas.Puede haber otros problemas
makefile
diferentes a los especificados por este mensajeAhora se nos ocurre la idea de verificar otras dependencias en una regla también:
Solo esto nos proporcionará el resultado deseado:
fuente
En mi caso, el mensaje de error hacía referencia a un nombre de archivo antiguo, que ya no existía porque se le cambió el nombre. Resultó que la información desactualizada no provenía del Makefile, sino de archivos en
.deps
directorios.Me encontré con este error después de copiar archivos de una máquina a otra. En ese proceso, supongo que las marcas de tiempo se pusieron en un estado inconsistente, lo que confundió "hacer" al ejecutar varios trabajos en paralelo (similar a este informe de error ).
Las construcciones secuenciales
make -j 1
no se vieron afectadas, pero me llevó un tiempo darme cuenta porque estaba usando un alias (make -j 8
).Para limpiar el estado, eliminé todos los
.deps
archivos y volví a generar el Makefile. Estos son los comandos que utilicé:Después de eso, el edificio funcionó nuevamente.
fuente
Si está tratando de construir John the Ripper "sangrado-jumbo" y obtiene un error como "make: *** No hay regla para hacer objetivo 'linux-x86-64'". Intente ejecutar este comando en su lugar:
./configure && make
fuente
En mi caso, la fuente y / o los archivos de objetos antiguos fueron bloqueados (solo lectura) por un IDE semi-bloqueado o por un servicio en la nube de respaldo que dejó de funcionar correctamente. Reiniciar todos los programas y servicios que estaban asociados con la estructura de carpetas resolvió el problema.
fuente
Otro ejemplo de un problema extraño y su solución:
Esta:
da:
make[3]: *** No rule to make target '/usr/lib/libPocoFoundationd.so', needed by '../hello_poco/bin/mac/HelloPoco'. Stop.
Pero si elimino
Poco_LIBRARIES
funciona:Estoy usando clang8 en Mac y clang 3.9 en Linux ¡El problema solo ocurre en Linux pero funciona en Mac!
Olvidé mencionar:
Poco_LIBRARIES
estaba mal, ¡no fue establecido por cmake / find_package!fuente
En mi caso, la ruta no está establecida en VPATH, después de agregar el error desapareció.
fuente
Hay varias razones para este error.
Una de las razones por las que encontré este error es al compilar para Linux y Windows.
Tengo un nombre de archivo con mayúsculas BaseClass.h SubClass.h Unix mantiene que tiene una convención de archivado que distingue mayúsculas de minúsculas y Windows no distingue entre mayúsculas y minúsculas.
C ++ ¿por qué las personas no usan mayúsculas en nombre de los archivos de encabezado?
Intente compilar una compilación limpia usando gmake clean si está usando gmake
Algunos editores de texto tienen configuraciones predeterminadas para ignorar los nombres de archivo que distinguen entre mayúsculas y minúsculas. Esto también podría conducir al mismo error.
¿Cómo agregar un archivo c ++ en Qt Creator cuyo nombre comienza con mayúsculas? Automáticamente lo hace minúscula
fuente
Este error ocurrió en Travis cuando olvidé agregar nuevos archivos a mi repositorio git. Error tonto, pero puedo ver que es bastante común.
fuente
En mi caso, fue debido a que llamé al Makefile: MAKEFILE (todo en mayúsculas)
fuente