es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Problema de compilación en Makefile – no se puede encontrar *.o, no existe tal archivo o directorio.

Estoy tratando de hacer un Makefile simple con archivos de diferentes subcarpetas. Este es mi Makefile.

CFLAGS = -g -Wall
IFLAGS = -Iinclude
OPATH = obj/
CPATH = src/

vpath %.h include
vpath %.c src
vpath %.o obj
vpath main bin



main: main.o grille.o io.o jeu.o
    gcc $(CFLAGS) -o main $(OPATH)main.o $(OPATH)grille.o $(OPATH)io.o $(OPATH)jeu.o 
    mv $@ bin/
main.o: main.c grille.h io.h jeu.h



grille.o : grille.c grille.h


io.o: io.c io.h


jeu.o: jeu.c jeu.h


%.o : 
    gcc $(CFLAGS) -c $< $(IFLAGS)
    mv $@ $(OPATH)

clean:
    rm obj/* bin/*

Tengo los archivos en subcarpetas llamadas src, obj e include. Obtengo este error.

C:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/11.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: cannot find obj/main.o: No such file or directory
C:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/11.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: cannot find obj/grille.o: No such file or directory
C:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/11.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: cannot find obj/io.o: No such file or directory
C:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/11.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: cannot find obj/jeu.o: No such file or directory
collect2.exe: error: ld returned 1 exit status
make: *** [makefile:15: main] Error 1

¿Alguna idea de cómo solucionarlo?

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Basado en el mensaje de error, parece que el Makefile no puede encontrar los archivos objeto ubicados en el directorio obj/. Una solución posible es asegurarse de que los archivos objeto se estén generando correctamente y se estén colocando en el directorio deseado.

    Intente ejecutar el Makefile con la opción -d o --debug para obtener una salida más detallada, lo que puede ayudar a depurar el problema:

    make -d
    

    Esto imprimirá toda la información de depuración interna para cada comando que Make ejecuta. Busque cualquier error o advertencia relacionada con el proceso de compilación o la ubicación de los archivos objeto.

    Otro problema potencial podría ser el separador de ruta utilizado en $(OPATH). Si está en Windows, intente cambiarlo a una barra diagonal invertida en lugar de una barra diagonal, así:

    OPATH = obj\
    

    Esto debería asegurarse de que se use el directorio correcto para almacenar los archivos objeto.

    Finalmente, verifique que la estructura de directorios coincida con la especificada en el Makefile. Asegúrese de que no haya errores tipográficos ni carpetas faltantes.

    Con estos pasos, el problema debería resolverse y el Makefile debería poder generar el ejecutable main sin errores.

Comments are closed.