使用隐式规则,不要重新声明make可以自动发现的东西。也简化了顶部的变量,但这是更优先的选择(一些只是重置默认值)。这可能稍微不太方便携带,但不是很明显。它在某些方面也更易于移植,例如在“gcc”不是默认编译器的系统上。
将localtime_tests和tap_tests转换成shell脚本(但不改变它们的作用),将逻辑转移到其他地方,这是使makefile每天可读的主要内容。
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特定的特性来
simplify
即使
more
,如果可接受的话。