131 lines
4.5 KiB
Makefile
131 lines
4.5 KiB
Makefile
#****************************************************************************
|
|
# 通用的生成动态库��?c/c++ GNU Makefile
|
|
# Writen By ZhuFeng,2007.2
|
|
# 功能:自动从所有的.c��?cpp文件列表中生成输出文件,可以生成动态库
|
|
#****************************************************************************
|
|
|
|
#常用定义选项
|
|
DW_NAME = faad
|
|
DW_VERSION = 1.1.0
|
|
MACHINE = $(shell uname -m)
|
|
OUTPUT_BIN_PATH = ../bin/
|
|
OUTPUT_INCLUDE_PATH = ./include/
|
|
SRC_PATH = ./
|
|
|
|
SRC_FILES = $(wildcard $(SRC_PATH)*.c)
|
|
|
|
EXPORT_INCLUDE_FILES = $(wildcard $(SRC_PATH)*.h) $(wildcard $(SRC_PATH)codebook/*.h)
|
|
|
|
USING_LIBS =
|
|
USING_INCLUDES_PATH =
|
|
|
|
#将会自动附加$(MACHINE)/$DEBUG
|
|
USING_LIBS_PATH =
|
|
DEBUG = YES
|
|
DEFINES =
|
|
|
|
#通用定义
|
|
G++ = g++
|
|
GCC = gcc
|
|
LD = g++
|
|
|
|
DEBUG_CFLAGS := -c -Wall -shared -fPIC -Wno-format -g -DDEBUG -fexceptions -fnon-call-exceptions
|
|
RELEASE_CFLAGS := -c -Wall -shared -fPIC -Wno-unknown-pragmas -Wno-format -O3 -fexceptions -fnon-call-exceptions
|
|
|
|
DEBUG_LDFLAGS := -g -shared -fPIC -Wl,-soname,lib$(DW_NAME).so
|
|
RELEASE_LDFLAGS := -shared -fPIC -Wl,-soname,lib$(DW_NAME).so
|
|
|
|
|
|
ifeq (YES, ${DEBUG})
|
|
CFLAGS := ${DEBUG_CFLAGS}
|
|
LDFLAGS := ${DEBUG_LDFLAGS}
|
|
USING_LIBS_PATH := $(addsuffix $(MACHINE)/debug/,$(USING_LIBS_PATH))
|
|
OUTPUT_PATH := $(OUTPUT_BIN_PATH)
|
|
else
|
|
CFLAGS := ${RELEASE_CFLAGS}
|
|
LDFLAGS := ${RELEASE_LDFLAGS}
|
|
USING_LIBS_PATH := $(addsuffix $(MACHINE)/release/,$(USING_LIBS_PATH))
|
|
OUTPUT_PATH := $(OUTPUT_BIN_PATH)$(MACHINE)/release/
|
|
endif
|
|
|
|
#****************************************************************************
|
|
# Makefile code common to all platforms
|
|
#****************************************************************************
|
|
|
|
CFLAGS += $(DEFINES)
|
|
CFLAGS += $(USING_INCLUDES_PATH)
|
|
|
|
#****************************************************************************
|
|
# 定义自动化编译宏,使用GCC方式
|
|
#****************************************************************************
|
|
# $(call make-depend,source-file,object-file,depend-file)
|
|
define make-depend
|
|
$(GCC) -MM -MF $3 -MP -MT $2 $(CFLAGS) $1
|
|
endef
|
|
|
|
OBJS = $(addsuffix .o,$(basename $(SRC_FILES)))
|
|
DEPENDS = $(addsuffix .d,$(basename $(SRC_FILES)))
|
|
|
|
DW_SVNVER = $(shell svnversion . | sed "s/.*://")
|
|
DW_BUILD_DATE = $(shell date)
|
|
|
|
OUTPUT = $(OUTPUT_PATH)lib$(DW_NAME).so.$(DW_VERSION)
|
|
CFLAGS += -DDW_SVNVER="\"$(DW_SVNVER)\"" -DDW_BUILD_DATE="\"$(DW_BUILD_DATE)\"" -DDW_VERSION="\"$(DW_VERSION)\""
|
|
|
|
VPATH = $(SRC_PATH)
|
|
EXPORT_INCLUDE_FILES := $(addprefix $(SRC_PATH),$(EXPORT_INCLUDE_FILES))
|
|
|
|
|
|
default:$(OUTPUT)
|
|
@echo "Build_Version: $(DW_VERSION)"
|
|
@ln -sf ./lib$(DW_NAME).so.$(DW_VERSION) $(OUTPUT_PATH)lib$(DW_NAME).so
|
|
@cp $(EXPORT_INCLUDE_FILES) $(OUTPUT_INCLUDE_PATH)
|
|
@echo "$(OUTPUT) MAKE 处理完毕"
|
|
@echo "\\033[32m\\033[1m[生成]\\033[21m 执行完毕!"
|
|
@echo "$(OUTPUT) 被生��?\\12$(EXPORT_INCLUDE_FILES)被复制到$(OUTPUT_INCLUDE_PATH)\\033[0m"
|
|
|
|
$(OUTPUT):$(OBJS)
|
|
@mkdir -p $(OUTPUT_PATH)
|
|
$(LD) $(LDFLAGS) -o $@ $^ $(USING_LIBS_PATH) $(USING_LIBS)
|
|
@echo "\\033[35m\\033[1m[链接]\\033[21m $@ 执行完毕,总计更新处理��?(words $?) 个文件\\033[0m"
|
|
|
|
%.o:%.c
|
|
@$(call make-depend,$<,$@,$(subst .o,.d,$@))
|
|
@$(GCC) $(CFLAGS) $< -o $@
|
|
@echo "\\033[32m\\033[1m[编译]\\033[21m $< 执行完毕\\033[0m"
|
|
|
|
%.o:%.cpp
|
|
@$(call make-depend,$<,$@,$(subst .o,.d,$@))
|
|
@$(G++) $(CFLAGS) $< -o $@
|
|
@echo "\\033[32m\\033[1m[编译]\\033[21m $< 执行完毕\\033[0m"
|
|
|
|
-include $(DEPENDS)
|
|
|
|
help:
|
|
@echo "\\033[1m\\033[33m============== 通用动态库MAKEFILE ==============\\033[0m"
|
|
@echo "\\033[33m 2007.2 Writen By ZhuFeng \\033[0m"
|
|
@echo "\\033[32m\\033[1mmake :\\033[21m 缺省调用方式,使用debug模式进行编译与连接,输出二进制文件到指定目录\\033[0m"
|
|
@echo "\\033[32m\\033[1mmake DEBUG=NO :\\033[21m 使用release模式进行编译与连接,输出二进制文件到指定目录 \\033[0m"
|
|
@echo "\\033[32m\\033[1mmake help :\\033[21m显示帮助信息\\033[0m"
|
|
@echo "\\033[32m\\033[1mmake rebuild :\\033[21m重新生成所有文件\\033[0m"
|
|
@echo "\\033[32m\\033[1mmake clean :\\033[21m清除生成的中间文件\\033[0m"
|
|
@echo "\\033[32m\\033[1mmake install :\\033[21m安装生成的文件到/usr/local/lib目录,拷贝头文件��?usr/local/include目录\\033[0m"
|
|
|
|
|
|
rebuild:clean default
|
|
@echo "\\033[34m\\033[1m[rebuild]\\033[21m 执行完毕\\033[0m"
|
|
clean:
|
|
@rm -f *.o
|
|
@rm -f *.d
|
|
@echo "\\033[34m\\033[1m[clean]\\033[21m 执行完毕\\033[0m"
|
|
test:
|
|
@echo "SVN_VERSION:$(SVN_VERSION)"
|
|
@echo "DW_VERSION:$(DW_VERSION)"
|
|
@echo "OUTPUT:$(OUTPUT)"
|
|
|
|
|
|
|
|
|
|
|
|
|