Pregunta

Admite que algunos archivos incluyan un programa en C, y que otro esté compuesto por otros, de la siguiente manera:

----------------------------------------
File            | Included files           
----------------------------------------
main.c          | stdio.h, table.h
----------------------------------------
list.c          | list.h
----------------------------------------
symbol.c        | symbol.h
----------------------------------------
table.c         | table.h
----------------------------------------
table.h         | symbol.h, list.h
----------------------------------------

por favor ayúdame a crear un makefile, ¡muchas gracias! Este es mi Makefile, pero ¿hay algún problema? ¿Quién puede depurar estos problemas, gracias!

hello:  main.o table.o 
    gcc main.o table.o -o hello

main.o: main.c table.h
    gcc -c main.c

table.o:    table.c table.h
    gcc -c table.c

symbol.o:   symbol.c symbol.h
    gcc -c symbol.c

list.o: list.c list.h
    gcc -c list.c


clean:
    rm hello *.o
¿Fue útil?

Solución

Aquí hay un comienzo, no exactamente cómo lo haría un profesional, pero es bueno para un nivel principiante:

hello: main.o list.o symbol.o table.o
    gcc -o hello main.o list.o symbol.o table.o

main.o: main.c table.h symbol.h list.h
    gcc -c -o main.o main.c

list.o: list.c list.h
    gcc -c -o list.o list.c

symbol.o: symbol.c symbol.h
    gcc -c -o symbol.o symbol.c

table.o: table.c table.h symbol.h list.h
    gcc -c -o table.o table.c

clean:
    rm hello *.o

El problema específico con su archivo MAKE dado es que no está vinculando en todos los archivos de objetos. Porque main.c incluye table.h y table.h incluye symbol.h y list. h , su programa seguramente necesitará vincular symbol.o y list.o también.

También es una buena práctica seguir las dependencias de encabezado (por ejemplo, main.o depende de table.h y symbol.h /list.h porque table.h depende de esos dos), esto se debe a que no hay "ordenado" forma de obtener un archivo intermedio para dependencias de encabezado.

Y rara vez se colocan encabezados estándar en los archivos de creación simplemente porque no se espera que cambien; si lo hacen (nuevo compilador), simplemente limpie y actualice.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top