-
Notifications
You must be signed in to change notification settings - Fork 0
/
Makefile
74 lines (68 loc) · 1.81 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
# 编译参数
CC := gcc
CXX := g++
AR := ar
RANLIB := ranlib
SHARE := -fpic -shared -o
INCLUDE := -I./ \
-I/usr/include/ \
-I/usr/local/include/
LIBS := -L./ \
-L/usr/lib/ \
-L/usr/lib64/
LDFLAGS := libdsm_db.a libleveldb.a -lpthread -lsnappy
DEFINES :=
CFLAGS := -g -Wall -O2 $(INCLUDE) $(DEFINES)
CXXFLAGS := -std=c++11 $(CFLAGS) -DHAVE_CONFIG_H
# make工具, Makefile指定
#MAKE = make
#MAKEFILE = Makefile
# default target
default: all
# 这块自行修改.
# 自定义文件, 支持多个目标, 写好每个目标的源文件名和目标文件名.
# 有编译可执行文件, 静态链接库, 动态链接库.
EXE := ttt
STATIC :=
DYNAMIC :=
SRCS := test.cpp
OBJS := $(patsubst %.cpp, %.o, $(SRCS))
sinclude $(OBJS:.o=.d)
# 具体编译过程, 这里可能会把其他目标的OBJS一起编译进来.
# LDFLAGS仅在链接时使用.
$(EXE): $(OBJS)
$(CXX) -o$@ $^ $(LIBS) $(LDFLAGS)
$(STATIC): $(OBJS)
$(AR) crs $@ $^
$(RANLIB) $@
$(DYNAMIC): $(OBJS)
$(CXX) $(SHARE) $@ $^ $(LDFLAGS) $(LIBS)
# 所有目标合集
TARGET := $(EXE) $(STATIC) $(DYNAMIC)
# 以下一般不需要改
.PHONY: all
all:
$(MAKE) $(TARGET)
.PHONY: clean
clean:
rm -f *.orig *~ *.o *.d
cleanall: clean
rm -f $(TARGET)
# 约定俗成的根据源文件自动生成头文件依赖.
%.d: %.c
@set -e
@rm -f $@
@$(CC) -MM $< | awk '{print "$@ " $$0}' > $@
%.d: %.cpp
@set -e
@rm -f $@
@$(CXX) -MM $< | awk '{print "$@ " $$0}' > $@
# 以下是生成.d文件的4种方法.
# 形如%.d %.o: %.c something.h...
# 生成.d的原因是.h里面增加或减少包含其他.h文件, .d也能同步更新.
#@$(CC) -MM $< | awk '{print "$@ " $$0}' > $@
#@$(CC) -MM $< | awk '{printf "%s %s\n", "$@", $$0}' > $@
#@$(CC) -MM $< | sed 's:^\(.*\):$@ \1:g' > $@
#@$(CC) -MM $(CPPFLAGS) $< > $@.$$$$; \
# sed 's,\($*\)\.o[ :]*,\1.o $@: ,g' < $@.$$$$ > $@; \
# rm -f $@.$$$$