linux平台Makefile样例

来源:互联网 发布:网络搬砖是什么意思 编辑:程序博客网 时间:2024/05/29 18:55
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

COMPILESTANDAR=-std=c99


#编译64位程序
PLATFORM=-m64


#包含路径:I
#预编译选项:-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)
0 0
原创粉丝点击