В настоящее время я работаю над проектом, в котором есть около 20 исходных файлов c и около 8 двоичных целей.Мы находим содержание Makefile довольно сложным и подверженным ошибкам.Основная проблема заключается в записи того, какие двоичные файлы зависят от каких объектных файлов, потому что автоматическое разрешение зависимостей заголовка кажется довольно простым (но мы еще не реализовали его).
Это пример того, как наш make-файл настроен в данный момент.Две программы foo и bar.Foo должен использовать функции, экспортированные из timestamp.c, а bar должен использовать функции, экспортированные из pretty_print.c, который, в свою очередь, использует функции timestamp для генерации строк с метками времени.
foo bar:
$(CC) -o $@ $^ $(CFLAGS) $(LIBS)
foo: foo.o timestamp.o
foo.o: timestamp.h
bar: bar.o pretty_print.o timestamp.o
bar.o: pretty_print.h
pretty_print.o: pretty_print.h timestamp.h
timestamp.o: timestamp.h
Есть ли лучший способ сделать это (кроме автоматической генерации строк foo.o и bar.o)?Я чувствую, что должен быть лучший способ, чем писать, что строка зависит от timestamp.o, когда она не включает timestamp.h.Это источник большинства ошибок на самом деле.Только когда компоновщик не может найти символ «create_timestamp», мы понимаем, что pretty_print опирается на функции из метки времени.Возможно, так оно и есть?