1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
|
OBJS:=$(patsubst %.cpp,%.o,$(wildcard src/*.cpp))
TOBJS:=$(patsubst %.cpp,%.o,$(wildcard src/test/*.cpp))
TDIRS:=$(filter-out %.o %.cpp %.h %.d,$(wildcard src/test/*))
TESTS:=$(patsubst src/test/%.o,%,$(TOBJS)) $(patsubst src/test/%,%,$(TDIRS))
ATOBJS:=$(TOBJS) $(patsubst %.cpp,%.o,$(foreach dr,$(TDIRS),$(wildcard $(dr)/*.cpp)))
LIB:=libbu++.a
DATE:=$(shell date +%F)
TXTCPP:="\ g++:\ \ \ "
TXTLNK:="\ \ ld:\ \ \ "
TXTDEP:="\ dep:\ \ \ "
TXTARC:="\ \ ar:\ \ \ "
.PHONY: all clean dist tests depclean cleanapi
.SILENT: clean $(OBJS) $(TOBJS) $(ATOBJS) $(TESTS) $(patsubst %.o,%.d,$(OBJS) $(TOBJS) $(ATOBJS) $(TESTS)) $(LIB)
all: libbu++.a tests
depclean:
-rm $(patsubst %.o,%.d,$(OBJS) $(ATOBJS))
-include $(patsubst %.o,%.d,$(OBJS) $(ATOBJS))
clean:
-rm $(OBJS) $(ATOBJS) $(TESTS) $(LIB)
# This bit I cribbed from the docs, seems to work great though!
%.d: %.cpp
g++ $(CXXFLAGS) -Isrc -M $(CPPFLAGS) $< | sed 's,\($(notdir $*)\)\.o[: ]*,$(dir $*)\1.o $@: ,g' > $@
echo "$(TXTDEP)$@"
%.o: %.cpp
g++ $(CXXFLAGS) -Isrc $(foreach dr,$(filter $(dir $@),$(foreach ddr,$(TDIRS),$(ddr)/)),-I$(dr)) -ggdb -c -o $@ $<
echo "$(TXTCPP)$@"
$(LIB): $(OBJS)
ar cr $(LIB) $(OBJS)
echo "$(TXTARC)$@"
$(TESTS): $(ATOBJS) $(LIB)
g++ $(LDFLAGS) -ggdb $(filter %$@.o, $(TOBJS) ) $(patsubst %.cpp,%.o,$(wildcard $(filter %$@, $(TDIRS))/*.cpp)) -L. -lbu++ -o $@
echo "$(TXTLNK)$@"
tests: $(TESTS)
dist: clean depclean
mkdir libbu++-$(DATE)
cp -a --target-directory=libbu++-$(DATE) Makefile src
tar --exclude=\.svn -c libbu++-$(DATE) | bzip2 -9 > libbu++-$(DATE).tar.bz2
rm -Rf libbu++-$(DATE)
install: libbu++.a
cat src/*.h | grep -v "#include \"" - > libbu++.h
cp -a libbu++.a $(PREFIX)/lib
cp -a libbu++.h $(PREFIX)/include
cleanapi:
-rm -Rf api
api: $(SRC)
-rm -Rf api
doxygen
make -C api/latex
#tests: $(TOBJS) $(LIB)
# for file in $(patsubst src/test/%.o,%,$(TOBJS)); \
# do g++ -o $$file src/test/$$file.o -L. -lbu++; \
# done
|