Вопрос

Поддержка у вас есть программа на языке Си, включенная в некоторые файлы, а какая-то из них состоит из некоторых других, так что следующим образом:

----------------------------------------
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
----------------------------------------

пожалуйста, помогите мне создать makefile, большое вам спасибо!Это мой Makefile, но есть проблема?кто может отладить эти проблемы, спасибо!

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
Это было полезно?

Решение

Вот начало, не совсем так, как это сделал бы профессионал, но хорошо для начального уровня:

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

Конкретная проблема с вашим данным makefile заключается в том, что вы не связываете все объектные файлы.Потому что main.c включает в себя table.h и table.h включает в себя symbol.h и list.h, вашей программе почти наверняка потребуется связать symbol.o и list.o также хорошо.

Также рекомендуется следовать зависимостям заголовков (например, main.o зависит от table.h и symbol.h/list.h потому что table.h зависит от этих двух) - это потому, что нет "аккуратного" способа получить промежуточный файл для зависимостей заголовков.

И вы редко помещаете стандартные заголовки в файлы make просто потому, что они не должны изменяться - если они изменятся (новый компилятор), просто очистите и создайте новые.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top