-
Notifications
You must be signed in to change notification settings - Fork 4
/
Copy pathMakefile
63 lines (48 loc) · 1.32 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
#CC = ${CC} # C compiler
DEBUG = n
LOGLEVEL = info
CFLAGS = -fPIC -Wall -Wextra -g # C flags
CFLAGS += -std=gnu99 -Wno-declaration-after-statement -fgnu89-inline
ifeq ($(DEBUG), y)
CFLAGS += -O0
else
CFLAGS += -O2
endif
# logging level
ifeq ($(LOGLEVEL), trace)
CFLAGS += -D__LOG_TRACE__
else ifeq ($(LOGLEVEL), debug)
CFLAGS += -D__LOG_DEBUG__
else ifeq ($(LOGLEVEL), info)
CFLAGS += -D__LOG_INFO__
else ifeq ($(LOGLEVEL), warn)
CFLAGS += -D__LOG_WARN__
else ifeq ($(LOGLEVEL), err)
CFLAGS += -D__LOG_ERROR__
endif
RM = rm -f # rm command
LIB_NAME = ccp
TARGET_LIB = lib${LIB_NAME}.so # target lib
STATIC_TARGET = lib${LIB_NAME}.a
TEST_TARGET = unittest
SRCS = ccp.c machine.c serialize.c ccp_priv.c # source files
OBJS = $(SRCS:.c=.o)
TEST_SRCS = unittest.c
TEST_OBJS = $(TEST_SRCS:.c=.o)
.PHONY: all
all: ${TARGET_LIB} ${STATIC_TARGET} test
$(TARGET_LIB): $(OBJS)
$(CC) -shared ${LDFLAGS} -o $@ $^
$(STATIC_TARGET): $(OBJS)
ar rcs $(STATIC_TARGET) $(OBJS)
$(SRCS:.c=.d):%.d:%.c
$(CC) $(CFLAGS) -MM $< >$@
-include $(SRCS:.c=.d)
$(TEST_TARGET): ${STATIC_TARGET} ${TEST_OBJS}
$(CC) ${CFLAGS} ${TEST_SRCS} ${STATIC_TARGET} -o ${TEST_TARGET}
test: $(TEST_TARGET)
./$(TEST_TARGET)
.PHONY: clean
clean:
-${RM} ${TARGET_LIB} ${OBJS} ${TEST_OBJS} $(SRCS:.c=.d) ${TEST_TARGET} ${TEST_TARGET} ${STATIC_TARGET}
-${RM} -r *.dSYM