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