Используйте неявные правила и не пересказывайте вещи, которые могут выяснить автоматически. Также упрощены переменные вверху, но это больше предпочтение (некоторые просто сбрасывают значения по умолчанию). Это, возможно, немного менее переносимо, но не так значительно, ИМХО. это также более портативно в некоторых отношениях, например в системах, где «gcc» не является компилятором по умолчанию.
Превращение localtime_tests и tap_tests в сценарии оболочки (но не изменяя то, что они делают), перемещает эту логику в другое место и является главным, что делает make-файл читаемым ежедневно.
CFLAGS = -g -Wall -ansi -pedantic -Wno-long-long -Wextra \
-Wdeclaration-after-statement -Wendif-labels -Wconversion
all : bin/check_max
bin/check_max : time64.o time64_config.h
time64.o : time64_config.h time64.h Makefile
bench : t/bench
time t/bench
t/bench : t/bench.c time64.o
t/localtime_test : time64.o
t/gmtime_test : time64.o
t/year_limit.t: t/tap.c time64.o
t/negative.t : t/tap.c time64.o
t/overflow.t : t/tap.c time64.o
t/timegm.t : t/tap.c time64.o
t/safe_year.t : t/tap.c time64.c
t/gmtime64.t : t/tap.c time64.o
t/mktime64.t : t/tap.c time64.o
t/asctime64.t : t/tap.c time64.o
t/ctime64.t : t/tap.c time64.o
t/seconds_between_years.t: t/tap.c time64.c
test : tap_tests localtime_tests
tap_tests: t/year_limit.t t/negative.t t/overflow.t t/timegm.t t/safe_year.t \
t/gmtime64.t t/asctime64.t t/ctime64.t
./tap_tests
localtime_tests: t/localtime_test t/gmtime_test
./localtime_tests
.PHONY : test tap_tests localtime_tests
clean:
-rm t/*.t t/localtime_test t/gmtime_test t/*_test.out.bz2 t/bench
-rm *.o
.PHONY : clean
Вы можете использовать специфичные для GNUmake функции, чтобы упростить даже больше , если эта потеря переносимости приемлема.