/
Makefile
72 lines (54 loc) · 1.33 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
CC=gcc
BASE_CFLAGS=-Wextra
DEBUG_CFLAGS=$(BASE_CFLAGS) -g -Og
RELEASE_CFLAGS=$(BASE_CFLAGS) -O2 -DNDEBUG
SRC_DIR=src/
OBJ_DIR=obj/
LIB_DIR=lib/
LIB_INSTALL_DIR=/usr/local/lib
HEADER_INSTALL_DIR=/usr/local/include
HEADER_FILE=include/forza.h
SRCS:=$(shell find $(SRC_DIR) -name '*.c')
OBJS:=$(patsubst $(SRC_DIR)%.c, $(OBJ_DIR)%.o, $(SRCS))
OBJ_DIRS:=$(sort $(dir $(OBJS)))
STATIC_LIB= $(LIB_DIR)libforza.a
DYNAMIC_LIB= $(LIB_DIR)libforza.so
.PHONY: all
all: debug
.PHONY: debug
debug: CFLAGS=$(DEBUG_CFLAGS)
debug: static
.PHONY: release
release: clean
release: CFLAGS=$(RELEASE_CFLAGS)
release: static
.PHONY: static
static: $(STATIC_LIB)
.PHONY: dynamic
dynamic: clean
dynamic: CFLAGS=$(RELEASE_CFLAGS) -fPIC
dynamic: $(DYNAMIC_LIB)
# Create directories for objects
$(OBJ_DIRS):
mkdir -p $@
# Create directory for library file
$(LIB_DIR):
mkdir -p $@
# Compile C files to objects
$(OBJS): $(SRCS) $(OBJ_DIRS)
$(CC) $(CFLAGS) -c $(patsubst $(OBJ_DIR)%.o, $(SRC_DIR)%.c, $@) -o $@
# Package static library
$(STATIC_LIB): $(LIB_DIR) $(OBJS)
rm -f $@
ar rcs $@ $(OBJS)
# Link dynamic library
$(DYNAMIC_LIB): $(LIB_DIR) $(OBJS)
$(CC) -fPIC -shared -o $@ $(OBJS) -lc
.PHONY: clean
clean:
rm -f $(LIB_DIR)*
rm -rf $(OBJ_DIR)*
.PHONY: install
install: static
install $(STATIC_LIB) $(LIB_INSTALL_DIR)
install $(HEADER_FILE) $(HEADER_INSTALL_DIR)