linux平台Makefile样例

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)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值