Помогите мне создать Makefile - PullRequest
1 голос
/ 30 апреля 2009

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

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

, пожалуйста, помогите мне создать make-файл, большое спасибо! Это мой 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

1 Ответ

6 голосов
/ 30 апреля 2009

Вот начало, не совсем как профессионал, но хорошо для начинающих:

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

Конкретная проблема с вашим заданным make-файлом заключается в том, что вы не связываете все объектные файлы. Поскольку 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 просто потому, что они не должны изменяться - если они это сделают (новый компилятор), просто очистите и обновите.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...