blob: 551d047e6b257085cb5948792484e32103298aed
1 | #**************************************************************************** |
2 | # 通用的生成动态库?c/c++ GNU Makefile |
3 | # Writen By ZhuFeng,2007.2 |
4 | # 功能:自动从所有的.c?cpp文件列表中生成输出文件,可以生成动态库 |
5 | #**************************************************************************** |
6 | |
7 | #常用定义选项 |
8 | DW_NAME = faad |
9 | DW_VERSION = 1.1.0 |
10 | MACHINE = $(shell uname -m) |
11 | OUTPUT_BIN_PATH = ../bin/ |
12 | OUTPUT_INCLUDE_PATH = ./include/ |
13 | SRC_PATH = ./ |
14 | |
15 | SRC_FILES = $(wildcard $(SRC_PATH)*.c) |
16 | |
17 | EXPORT_INCLUDE_FILES = $(wildcard $(SRC_PATH)*.h) $(wildcard $(SRC_PATH)codebook/*.h) |
18 | |
19 | USING_LIBS = |
20 | USING_INCLUDES_PATH = |
21 | |
22 | #将会自动附加$(MACHINE)/$DEBUG |
23 | USING_LIBS_PATH = |
24 | DEBUG = YES |
25 | DEFINES = |
26 | |
27 | #通用定义 |
28 | G++ = g++ |
29 | GCC = gcc |
30 | LD = g++ |
31 | |
32 | DEBUG_CFLAGS := -c -Wall -shared -fPIC -Wno-format -g -DDEBUG -fexceptions -fnon-call-exceptions |
33 | RELEASE_CFLAGS := -c -Wall -shared -fPIC -Wno-unknown-pragmas -Wno-format -O3 -fexceptions -fnon-call-exceptions |
34 | |
35 | DEBUG_LDFLAGS := -g -shared -fPIC -Wl,-soname,lib$(DW_NAME).so |
36 | RELEASE_LDFLAGS := -shared -fPIC -Wl,-soname,lib$(DW_NAME).so |
37 | |
38 | |
39 | ifeq (YES, ${DEBUG}) |
40 | CFLAGS := ${DEBUG_CFLAGS} |
41 | LDFLAGS := ${DEBUG_LDFLAGS} |
42 | USING_LIBS_PATH := $(addsuffix $(MACHINE)/debug/,$(USING_LIBS_PATH)) |
43 | OUTPUT_PATH := $(OUTPUT_BIN_PATH) |
44 | else |
45 | CFLAGS := ${RELEASE_CFLAGS} |
46 | LDFLAGS := ${RELEASE_LDFLAGS} |
47 | USING_LIBS_PATH := $(addsuffix $(MACHINE)/release/,$(USING_LIBS_PATH)) |
48 | OUTPUT_PATH := $(OUTPUT_BIN_PATH)$(MACHINE)/release/ |
49 | endif |
50 | |
51 | #**************************************************************************** |
52 | # Makefile code common to all platforms |
53 | #**************************************************************************** |
54 | |
55 | CFLAGS += $(DEFINES) |
56 | CFLAGS += $(USING_INCLUDES_PATH) |
57 | |
58 | #**************************************************************************** |
59 | # 定义自动化编译宏,使用GCC方式 |
60 | #**************************************************************************** |
61 | # $(call make-depend,source-file,object-file,depend-file) |
62 | define make-depend |
63 | $(GCC) -MM -MF $3 -MP -MT $2 $(CFLAGS) $1 |
64 | endef |
65 | |
66 | OBJS = $(addsuffix .o,$(basename $(SRC_FILES))) |
67 | DEPENDS = $(addsuffix .d,$(basename $(SRC_FILES))) |
68 | |
69 | DW_SVNVER = $(shell svnversion . | sed "s/.*://") |
70 | DW_BUILD_DATE = $(shell date) |
71 | |
72 | OUTPUT = $(OUTPUT_PATH)lib$(DW_NAME).so.$(DW_VERSION) |
73 | CFLAGS += -DDW_SVNVER="\"$(DW_SVNVER)\"" -DDW_BUILD_DATE="\"$(DW_BUILD_DATE)\"" -DDW_VERSION="\"$(DW_VERSION)\"" |
74 | |
75 | VPATH = $(SRC_PATH) |
76 | EXPORT_INCLUDE_FILES := $(addprefix $(SRC_PATH),$(EXPORT_INCLUDE_FILES)) |
77 | |
78 | |
79 | default:$(OUTPUT) |
80 | @echo "Build_Version: $(DW_VERSION)" |
81 | @ln -sf ./lib$(DW_NAME).so.$(DW_VERSION) $(OUTPUT_PATH)lib$(DW_NAME).so |
82 | @cp $(EXPORT_INCLUDE_FILES) $(OUTPUT_INCLUDE_PATH) |
83 | @echo "$(OUTPUT) MAKE 处理完毕" |
84 | @echo "\\033[32m\\033[1m[生成]\\033[21m 执行完毕!" |
85 | @echo "$(OUTPUT) 被生?\\12$(EXPORT_INCLUDE_FILES)被复制到$(OUTPUT_INCLUDE_PATH)\\033[0m" |
86 | |
87 | $(OUTPUT):$(OBJS) |
88 | @mkdir -p $(OUTPUT_PATH) |
89 | $(LD) $(LDFLAGS) -o $@ $^ $(USING_LIBS_PATH) $(USING_LIBS) |
90 | @echo "\\033[35m\\033[1m[链接]\\033[21m $@ 执行完毕,总计更新处理?(words $?) 个文件\\033[0m" |
91 | |
92 | %.o:%.c |
93 | @$(call make-depend,$<,$@,$(subst .o,.d,$@)) |
94 | @$(GCC) $(CFLAGS) $< -o $@ |
95 | @echo "\\033[32m\\033[1m[编译]\\033[21m $< 执行完毕\\033[0m" |
96 | |
97 | %.o:%.cpp |
98 | @$(call make-depend,$<,$@,$(subst .o,.d,$@)) |
99 | @$(G++) $(CFLAGS) $< -o $@ |
100 | @echo "\\033[32m\\033[1m[编译]\\033[21m $< 执行完毕\\033[0m" |
101 | |
102 | -include $(DEPENDS) |
103 | |
104 | help: |
105 | @echo "\\033[1m\\033[33m============== 通用动态库MAKEFILE ==============\\033[0m" |
106 | @echo "\\033[33m 2007.2 Writen By ZhuFeng \\033[0m" |
107 | @echo "\\033[32m\\033[1mmake :\\033[21m 缺省调用方式,使用debug模式进行编译与连接,输出二进制文件到指定目录\\033[0m" |
108 | @echo "\\033[32m\\033[1mmake DEBUG=NO :\\033[21m 使用release模式进行编译与连接,输出二进制文件到指定目录 \\033[0m" |
109 | @echo "\\033[32m\\033[1mmake help :\\033[21m显示帮助信息\\033[0m" |
110 | @echo "\\033[32m\\033[1mmake rebuild :\\033[21m重新生成所有文件\\033[0m" |
111 | @echo "\\033[32m\\033[1mmake clean :\\033[21m清除生成的中间文件\\033[0m" |
112 | @echo "\\033[32m\\033[1mmake install :\\033[21m安装生成的文件到/usr/local/lib目录,拷贝头文件?usr/local/include目录\\033[0m" |
113 | |
114 | |
115 | rebuild:clean default |
116 | @echo "\\033[34m\\033[1m[rebuild]\\033[21m 执行完毕\\033[0m" |
117 | clean: |
118 | @rm -f *.o |
119 | @rm -f *.d |
120 | @echo "\\033[34m\\033[1m[clean]\\033[21m 执行完毕\\033[0m" |
121 | test: |
122 | @echo "SVN_VERSION:$(SVN_VERSION)" |
123 | @echo "DW_VERSION:$(DW_VERSION)" |
124 | @echo "OUTPUT:$(OUTPUT)" |
125 | |
126 | |
127 | |
128 | |
129 | |
130 | |
131 |