From ce31b926dfd46a62d4c9f34edd414ecc3b4b0a0b Mon Sep 17 00:00:00 2001 From: Laurent Mazet Date: Sat, 30 Dec 2023 07:43:42 +0100 Subject: [PATCH] best makefile --- makefile | 39 +++++++++++++++++++++++++++++++++------ 1 file changed, 33 insertions(+), 6 deletions(-) diff --git a/makefile b/makefile index d79dbe4..dcf51e3 100644 --- a/makefile +++ b/makefile @@ -12,8 +12,13 @@ OFLAGS = -O4 -Os #OFLAGS += -malign-double CFLAGS += -W -Wall -Wextra -g #CFLAGS += -std=c99 -D_XOPEN_SOURCE=500 -CFLAGS += $(OFLAGS) $(INCLUDES) $(GCOV) -LDFLAGS += -g $(GCOV) +CFLAGS += $(OFLAGS) $(INCLUDES) $(OPTIONS) +LDFLAGS += -g $(OPTIONS) + +ifeq ($(OS),Windows_NT) +#LDLIBS += -lws2_32 +endif + # Targets @@ -50,7 +55,7 @@ count: clean: $(call TITLE, "Cleaning") touch clean - rm -f clean $(wildcard *.d *.ld *.log *.o *.test *~ .exec_*) + rm -f clean $(wildcard *.d *.ld *.log *.o *.test *~ .exec_* gmon.out) $(call PASS, SUCCESS) depends: $(patsubst %.c, %.d, $(wildcard *.c)) $(patsubst %, %.ld, $(ALLEXE)) @@ -58,6 +63,9 @@ depends: $(patsubst %.c, %.d, $(wildcard *.c)) $(patsubst %, %.ld, $(ALLEXE)) gcovs: $(MAKE) $(addprefix gcov_,$(ALLEXE)) +gprofs: + $(MAKE) $(addprefix gprof_,$(ALLEXE)) + purge: clean $(call TITLE, "Purging") touch purge @@ -70,7 +78,7 @@ valgrinds: all wipe: purge $(call TITLE, "Wiping") touch wipe - rm -f wipe $(wildcard *.gcda *.gcno *.gcov) + rm -f wipe $(wildcard *.gcda *.gcno *.gcov *.glog) $(call PASS, SUCCESS) tests: all @@ -83,7 +91,7 @@ include $(wildcard *.ld) gcov_%: $(MAKE) purge - GCOV="-coverage -O0" $(MAKE) + OPTIONS="-coverage -O0" $(MAKE) $(MAKE) test_$(@:gcov_%=%) gcov `sed -e 's/\.exe:/.c/;s/\.o/.c/g' $(@:gcov_%=%.ld)` touch gcov @@ -91,6 +99,25 @@ gcov_%: $(MAKE) purge grep '#####' *.c.gcov || true +gprof_%: + $(MAKE) purge + $(MAKE) depends + OPTIONS="-pg" $(MAKE) ${@:gprof_%=%}.exe + $(MAKE) ${@:gprof_%=%}.test + IFS=$$'\n'; id=1; \ + for test in `cat ${@:gprof_%=%}.test | sed 's,${@:gprof_%=%}.exe,./${@:gprof_%=%}.exe,g'`; do \ + log=${@:gprof_%=%}.prof-$$id.glog; \ + $(call TITLE, test: $$test); \ + echo $$test > $$log; \ + eval $$test >> $$log; \ + [ $$? -eq 0 ] \ + && echo -e "\033[1;32mSUCCESS\033[0;0m" \ + || echo -e "\033[1;31mFAILED\033[0;0m"; \ + [ -f gmon.out ] && { gprof ${@:gprof_%=%}.exe gmon.out >> $$log; rm gmon.out; }; \ + let id++; \ + done; + $(MAKE) purge + %.test: %.c $(call TITLE, "Building $@") # awk '/\/\* *test:.*\*\// { sub(/^.*\/\* *test: */, ""); sub(/ *\*\/.*$$/, ""); print }' $< > $@ @@ -132,7 +159,7 @@ valgrind_%: %.exe %.exe: %.o %.d $(call TITLE, "Building $@") - $(CC) $(LDFLAGS) $< $(shell perl -- getcomments.pl -p='linker:\s' -f='%' ${<:.o=.c}) -o $@ + $(CC) $(LDFLAGS) $< $(shell perl -- getcomments.pl -p='linker:\s' -f='%' ${<:.o=.c}) $(LDLIBS) -o $@ $(call PASS, SUCCESS) ## Phony -- 2.30.2