Add make examples recipe
[Generic-Data-Structures.git] / Makefile
bloba11ecfbfd21f494506711ac709f86a04d625b532
1 .PHONY: default clean libs test examples install uninstall doxygen
3 SRC = src
4 BIN = bin
6 CFILES = $(wildcard $(SRC)/*.c) $(wildcard $(SRC)/*/*.c)
7 OFILES = $(patsubst %.c,%.o,$(CFILES))
8 TESTFILES = $(wildcard test/*)
9 EXAMPLES = $(wildcard example/*.c)
11 CC = cc
12 CCFLAGS += -Wall -Wextra -pedantic -std=c99 -Wstrict-prototypes -g -fPIC -O3
14 AR = ar
15 ARFLAGS = rcs
17 INSTALL_PATH ?= /usr/local
19 default: libs
21 libs: $(OFILES) | $(BIN)/
22 @ echo "=> $(BIN)/libGDS.so"
23 @ $(CC) $(CCFLAGS) -shared -o ./$(BIN)/libGDS.so $(OFILES)
24 @ echo "=> $(BIN)/libGDS-static.a"
25 @ $(AR) $(ARFLAGS) ./$(BIN)/libGDS-static.a $(OFILES)
27 install: $(BIN)/libGDS.so $(BIN)/libGDS-static.a
28 @ echo "INSTALL $(INSTALL_PATH)/lib/libGDS.so"
29 @ echo "INSTALL $(INSTALL_PATH)/lib/libGDS-static.a"
30 @ install -d $(INSTALL_PATH)/lib
31 @ install -m 644 $(BIN)/libGDS* $(INSTALL_PATH)/lib
32 @ echo "INSTALL $(INSTALL_PATH)/include/GDS/"
33 @ install -d $(INSTALL_PATH)/include/GDS
34 @ install -d $(INSTALL_PATH)/include/GDS/util
35 @ install -m 644 $(SRC)/*.h $(INSTALL_PATH)/include/GDS
36 @ install -m 644 $(SRC)/util/*.h $(INSTALL_PATH)/include/GDS/util
38 $(BIN)/libGDS.so $(BIN)/libGDS-static.a:
39 @ $(MAKE) --no-print-directory libs
41 uninstall:
42 @ echo "RM $(INSTALL_PATH)/lib/libGDS.so"
43 @ echo "RM $(INSTALL_PATH)/lib/libGDS-static.a"
44 @ rm -f $(INSTALL_PATH)/lib/libGDS*
45 @ echo "RM $(INSTALL_PATH)/include/GDS/"
46 @ rm -rf $(INSTALL_PATH)/include/GDS
48 NO-RUN?= false # If true, only builds the test, without running them
49 test: $(TESTFILES) libs | $(BIN)/
50 @ $(foreach T,$(filter %.c,$(TESTFILES)), \
51 $(CC) $(CCFLAGS) -o $(BIN)/$(patsubst %.c,%.out, $(notdir $(T))) $(T) -L./$(BIN)/ -lGDS-static; \
52 $(NO-RUN) || $(BIN)/$(patsubst %.c,%.out, $(notdir $(T))) || exit 1;)
54 examples: $(EXAMPLES) $(OFILES) | $(BIN)/
55 @ $(foreach F,$(EXAMPLES), \
56 echo " CC $(F)" ; \
57 $(CC) $(CCFLAGS) -o $(patsubst example/%.c,bin/%,$(F)) $(F) $(OFILES) ;)
59 doxygen: ./doxygen/
60 @ echo -e "\
61 /** @mainpage \n \
62 @verbinclude README.adoc */" > ./doxygen/doc.doxy
63 @ echo "/**" >> doxygen/doc.doxy
64 @ find ./src -name '*.h' -exec bash -c ' \
65 name={} ; base=$$(basename $$name) ; \
66 echo -n " * @file $$name " >> doxygen/doc.doxy ; \
67 cat $$name | grep $$base | sed "s/.*$$base -//"' >> doxygen/doc.doxy \;
68 @ echo "*/" >> doxygen/doc.doxy
69 doxygen .doxyfile
70 @ rm -f doxygen/doc.doxy
72 .c.o:
73 @ echo "CC $@"
74 @ $(CC) $(CCFLAGS) -o $@ -c $<
76 %/:
77 @ mkdir $@
79 clean:
80 @ rm -f $(OFILES)
81 @ rm -rf doxygen