Je voudrais des conseils sur le Makefile suivant. Cela fonctionne très bien, mais il est trop redondant et n'utilise pas la majeure partie de la magie que peut faire un projet en C.Comment Makefile peut être rendu meilleur/plus facile/moins redondant?
Son but est de tester une petite bibliothèque C ANSI. La portabilité est importante.
.PHONY : test
OPTIMIZE = -g
INCLUDE = -I.
CC = gcc
WARNINGS = -Wall -ansi -pedantic -Wno-long-long -Wextra -Wdeclaration-after-statement -Wendif-labels -Wconversion
CFLAGS = $(WARNINGS) $(OPTIMIZE) $(INCLUDE)
COMPILE = $(CC) $(CFLAGS)
LINK = $(COMPILE)
all : time64.o bin/check_max
bin/check_max : time64.o time64_config.h bin/check_max.c
$(LINK) time64.o bin/check_max.c -o [email protected]
time64.o : time64_config.h time64.h time64.c Makefile
t/bench : t/bench.c time64.o
$(LINK) time64.o t/bench.c -o [email protected]
bench : t/bench
time t/bench
t/localtime_test : t/localtime_test.c time64.o
$(LINK) time64.o t/localtime_test.c -o [email protected]
t/gmtime_test : t/gmtime_test.c time64.o
$(LINK) time64.o t/gmtime_test.c -o [email protected]
t/year_limit.t : t/tap.c t/year_limit.t.c time64.o
$(LINK) time64.o t/year_limit.t.c -o [email protected]
t/negative.t : t/tap.c t/negative.t.c time64.o
$(LINK) time64.o t/negative.t.c -o [email protected]
t/overflow.t : t/tap.c t/overflow.t.c time64.o
$(LINK) time64.o t/overflow.t.c -o [email protected]
t/timegm.t : t/tap.c t/timegm.t.c time64.o
$(LINK) time64.o t/timegm.t.c -o [email protected]
t/safe_year.t : t/tap.c t/safe_year.t.c time64.c
$(LINK) t/safe_year.t.c -o [email protected]
t/gmtime64.t : t/tap.c t/gmtime64.t.c time64.o
$(LINK) time64.o t/gmtime64.t.c -o [email protected]
t/mktime64.t : t/tap.c t/mktime64.t.c time64.o
$(LINK) time64.o t/mktime64.t.c -o [email protected]
t/asctime64.t : t/tap.c t/asctime64.t.c time64.o
$(LINK) time64.o t/asctime64.t.c -o [email protected]
t/ctime64.t : t/tap.c t/ctime64.t.c time64.o
$(LINK) time64.o t/ctime64.t.c -o [email protected]
t/seconds_between_years.t : t/tap.c t/seconds_between_years.t.c time64.c
$(LINK) t/seconds_between_years.t.c -o [email protected]
test : tap_tests localtime_tests
localtime_tests: t/localtime_test t/gmtime_test
@which bzdiff > /dev/null || (echo 'You need bzdiff to run these tests'; exit 1)
@which less > /dev/null || (echo 'You need less to run these tests'; exit 1)
@echo "On failure, these tests will produce a diff between the failed and expected results. If they pass they'll be quiet."
TZ=Canada/Eastern t/gmtime_test | bzip2 -9 > t/gmtime_test.out.bz2
bzdiff -u t/gmtime_test.out.bz2 t/gmtime.out.bz2 | less -F
TZ=Canada/Eastern t/localtime_test | bzip2 -9 > t/eastern_test.out.bz2
bzdiff -u t/eastern_test.out.bz2 t/eastern.out.bz2 | less -F
TZ=Australia/West t/localtime_test | bzip2 -9 > t/oz_test.out.bz2
bzdiff -u t/oz_test.out.bz2 t/oztime.out.bz2 | less -F
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
@which prove > /dev/null || (echo 'You need prove (from the Test::Harness perl module) to run these tests'; exit 1)
@prove --exec '' t/*.t
clean:
-rm t/*.t \
t/localtime_test \
t/gmtime_test \
t/*_test.out.bz2 \
t/bench \
*.o
Merci! J'ai pris la plupart de vos conseils, ce qui m'a également forcé à nettoyer certains bits disgracieux dans le code de test. J'ai quitté CFLAGS en morceaux parce que je veux changer le drapeau d'optimisation pour la production mais laisser les drapeaux d'avertissement seuls. Je vais normaliser le localtime_tests en tant que script Perl plus tard. – Schwern