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.cppdisponible 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 -MTy gnu make patterns puede resolver esto. Ver también .../../src/file.cpero en realidad lo estaba../../src/folder/file.cLa 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ó
TheOtherLibrarya 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
Libraryconstrucció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_OBJ1la 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
makesí mismos. Consideremos un ejemplo.El contenido de mi carpeta es:
Mientras que mi
makefilepareceAunque tengo
index.mddónde debería estar y no hay ningún error en el nombre, el mensaje demakeserá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)
makeno se puede determinar qué causó exactamente el problema.Vamos a alterar
makefileun 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
makedependen de reglas y no siempre apuntan a la raíz de los problemas.Puede haber otros problemas
makefilediferentes 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
.depsdirectorios.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 1no 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
.depsarchivos 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 && makefuente
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_LIBRARIESfunciona:Estoy usando clang8 en Mac y clang 3.9 en Linux ¡El problema solo ocurre en Linux pero funciona en Mac!
Olvidé mencionar:
Poco_LIBRARIESestaba 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