-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathMakefile
83 lines (63 loc) · 1.93 KB
/
Makefile
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
70
71
72
73
74
75
76
77
78
79
80
81
82
83
SHARED_TARGET = dist/shared/lib45d.so
STATIC_TARGET = dist/static/lib45d.a
CC = g++
CFLAGS = -Wall -Wextra -Isrc/incl -fpic -std=c++11
LIBS =
CFLAGS += $(EXTRA_CFLAGS) # allow additional cflags passed with `make EXTRA_CFLAGS="-flag1 -flag2"`
LIBS += $(EXTRA_LIBS) # allow additional link flags passed with `make EXTRA_LIBS="-flag1 -flag2"`
SOURCE_FILES := $(shell find src/impl -name *.cpp)
OBJECT_FILES := $(patsubst src/impl/%.cpp, build/%.o, $(SOURCE_FILES))
HEADER_FILES := $(shell find src/incl/45d -name *.hpp)
INCLUDE_PREFIX = /usr/include
LIB_PREFIX = /usr/lib
HEADER_INSTALL_TARGETS := $(patsubst src/incl/45d/%.hpp, $(DESTDIR)$(INCLUDE_PREFIX)/45d/%.hpp, $(HEADER_FILES))
ifdef DEVEL
default: dev
else
default: shared
endif
all: default
static: $(STATIC_TARGET)
shared: $(SHARED_TARGET)
dev: static shared
$(SHARED_TARGET): $(OBJECT_FILES) $(HEADER_FILES)
mkdir -p $(dir $@)
$(CC) -shared $(OBJECT_FILES) -Wall $(LIBS) -o $@
$(STATIC_TARGET): $(OBJECT_FILES) $(HEADER_FILES)
mkdir -p $(dir $@)
ar crvs $@ $(OBJECT_FILES)
build/%.o: src/impl/%.cpp
mkdir -p $(dir $@)
$(CC) $(CFLAGS) -c $< -o $@
clean: clean-build clean-target clean-tests
clean-build:
-rm -rf build
clean-target:
-rm -f $(SHARED_TARGET) $(STATIC_TARGET)
ifdef DEVEL
install: dev $(HEADER_INSTALL_TARGETS)
else
install: default
endif
mkdir -p $(DESTDIR)$(LIB_PREFIX)
cp -f $(SHARED_TARGET) $(DESTDIR)$(LIB_PREFIX)
ifdef DEVEL
cp -f $(STATIC_TARGET) $(DESTDIR)$(LIB_PREFIX)
endif
# install headers
$(DESTDIR)$(INCLUDE_PREFIX)/45d/%.hpp: src/incl/45d/%.hpp
mkdir -p $(dir $@)
cp -f $< $@
uninstall:
-rm -f $(DESTDIR)$(LIB_PREFIX)/$(notdir $(SHARED_TARGET)) $(DESTDIR)$(LIB_PREFIX)/$(notdir $(STATIC_TARGET)) $(HEADER_INSTALL_TARGETS)
test: static
$(MAKE) test -C tests -j1
clean-tests:
$(MAKE) clean -C tests
docs: api-doc dev-doc
%-doc: doc/%-doc.doxyfile $(HEADER_FILES) doc/main-page.dox
-rm $@ -rf
doxygen $<
mv doc/html $@
clean-docs:
-rm -rf api-doc dev-doc