EXEDIR=./bin
ifneq ($(EXEDIR), $(wildcard $(EXEDIR)))
$(shell mkdir $(EXEDIR))
endif
#输出文件名
NAME=$(EXEDIR)/libMtest.so
#当前目录编译
TOPDIR=.
#所有要编译的源文件
SOURCE:=$(shell find $(TOPDIR) -name '*.c') $(shell find $(TOPDIR) -name '*.cpp')
#所有编译后生成的目标文件
OBJS:=$(patsubst %.cpp,%.o,$(patsubst %.c,%.o,$(SOURCE)))
#编译器版本
VERSION=--version
#头文件包含路径
SEARCHDIR=$(addprefix -I,/usr/java/jdk1.6.0_38/include /usr/java/jdk1.6.0_38/include/linux)
#编译选项
CFLAG=-D_LINUX_ -c $(SEARCHDIR)
#要链接库文件搜索路径
LIBDIR=/mnt/hgfs/Mtest/linux/
#要链接本地库文件
LIBLOCALFILE=$(addprefix $(LIBDIR), Mtest.a)
#要链接系统库文件
LIBSYSFILE=$(addprefix -l, pthread)
#链接库文件选项
LIBFLAG=$(LIBLOCALFILE) $(LIBSYSFILE)
#生成动态库链接选项
LDLLFLAG=-fPIC -shared
#编译警告(-Werror) (-Wall)
WALLINFO=-O2
#编译标准:-std=c89
#预编译选项:-E
#汇编选项:-S
#addprefix:添加前缀
#wildcard:通配符拓展
#notdir:取消路径
#patsubst:通配符替换
#$(addprefix src/,foo bar):在foo bar目录前添加"src/"路径
#src=$(wildcard *.c ./sub/*.c):表当前目录下所有.c文件的替换
#dir=$(notdir $(src)):去除路径
#obj=$(patsubst %.c,%.o,$(SOURCE) ):将SOURCE中所有.c结尾的替换为.o
#ff=$(filter %.c %.s,$(SOURCE)):返回SOURCE中所有以.c和.s结尾的字符串
#off=$(filter-out %.c %.s,$(SOURCE)):返回SOURCE中除以.c和.s结尾的字符串
#strip:去空格函数
#subst:字符串替换函数
#编译器
#COMPILER=gcc
#jni Dll c++版本采用g++编译
COMPILER=g++
LINK: COMPILE
$(COMPILER) $(LDLLFLAG) $(OBJS) -o $(NAME) $(LIBFLAG)
@#cp -f $(NAME) ../Mtest/linuxbin
#编译命令
COMPILE :
@$(COMPILER) $(VERSION)
$(COMPILER) $(WALLINFO) $(COMPILESTANDAR) $(CFLAG) $(SOURCE)
#清除命令
clean:
@rm -f $(OBJS)
ifneq ($(EXEDIR), $(wildcard $(EXEDIR)))
$(shell mkdir $(EXEDIR))
endif
#输出文件名
NAME=$(EXEDIR)/libMtest.so
#当前目录编译
TOPDIR=.
#所有要编译的源文件
SOURCE:=$(shell find $(TOPDIR) -name '*.c') $(shell find $(TOPDIR) -name '*.cpp')
#所有编译后生成的目标文件
OBJS:=$(patsubst %.cpp,%.o,$(patsubst %.c,%.o,$(SOURCE)))
#编译器版本
VERSION=--version
#头文件包含路径
SEARCHDIR=$(addprefix -I,/usr/java/jdk1.6.0_38/include /usr/java/jdk1.6.0_38/include/linux)
#编译选项
CFLAG=-D_LINUX_ -c $(SEARCHDIR)
#要链接库文件搜索路径
LIBDIR=/mnt/hgfs/Mtest/linux/
#要链接本地库文件
LIBLOCALFILE=$(addprefix $(LIBDIR), Mtest.a)
#要链接系统库文件
LIBSYSFILE=$(addprefix -l, pthread)
#链接库文件选项
LIBFLAG=$(LIBLOCALFILE) $(LIBSYSFILE)
#生成动态库链接选项
LDLLFLAG=-fPIC -shared
#编译警告(-Werror) (-Wall)
WALLINFO=-O2
#编译标准:-std=c89
COMPILESTANDAR=-std=c99
#编译64位程序
PLATFORM=-m64
#预编译选项:-E
#汇编选项:-S
#addprefix:添加前缀
#wildcard:通配符拓展
#notdir:取消路径
#patsubst:通配符替换
#$(addprefix src/,foo bar):在foo bar目录前添加"src/"路径
#src=$(wildcard *.c ./sub/*.c):表当前目录下所有.c文件的替换
#dir=$(notdir $(src)):去除路径
#obj=$(patsubst %.c,%.o,$(SOURCE) ):将SOURCE中所有.c结尾的替换为.o
#ff=$(filter %.c %.s,$(SOURCE)):返回SOURCE中所有以.c和.s结尾的字符串
#off=$(filter-out %.c %.s,$(SOURCE)):返回SOURCE中除以.c和.s结尾的字符串
#strip:去空格函数
#subst:字符串替换函数
#编译器
#COMPILER=gcc
#jni Dll c++版本采用g++编译
COMPILER=g++
LINK: COMPILE
$(COMPILER) $(LDLLFLAG) $(OBJS) -o $(NAME) $(LIBFLAG)
@#cp -f $(NAME) ../Mtest/linuxbin
#编译命令
COMPILE :
@$(COMPILER) $(VERSION)
$(COMPILER) $(WALLINFO) $(COMPILESTANDAR) $(CFLAG) $(SOURCE)
#清除命令
clean:
@rm -f $(OBJS)