#makefile for iOS
#SDK7.1
DEVELOPER=/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer
IPHONESDK=$(DEVELOPER)/SDKs/iPhoneOS7.1.sdk
#SDK6.0
#DEVELOPER=/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer
#IPHONESDK=$(DEVELOPER)/SDKs/iPhoneOS6.0.sdk
#SDK5.1
#DEVELOPER=/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer
#IPHONESDK=$(DEVELOPER)/SDKs/iPhoneOS5.1.sdk
#SDK5.0
#DEVELOPER=/Developer/Platforms/iPhoneOS.platform/Developer
#IPHONESDK=$(DEVELOPER)/SDKs/iPhoneOS5.0.sdk
#CC=$(DEVELOPER)/usr/bin/arm-apple-darwin10-llvm-gcc-4.2
#CC=$(DEVELOPER)/usr/bin/arm-apple-darwin10-llvm-g++-4.2
CC=g++
PLATFORM=IOS
export PLATFORM
GLOBAL_CCXXFLAGS:= -g -DUNICODE -D_UNICODE
export GLOBAL_CCXXFLAGS
#IOS CPU
IOS_ARCH= armv6 armv7 armv7s i386
#IOS_ARCH= armv7
export IOS_ARCH
#################################
#目标文件
OBJS +=libtest.o
PROG = libtest
DLIB = libtest.so
LIB = libtest.a
#################################
#包含头文件
INCPATH += -I./
INCPATH += -I./include/
INCPATH += -I./Common/
INCPATH += -I$(IPHONESDK)/usr/include/
INCPATH += -I$(IPHONESDK)/usr/include/c++/4.2.1/
INCPATH += -I$(IPHONESDK)/usr/include/c++/4.2.1/armv7-apple-darwin10/
#################################
#包含库文件
LIBS += -lz
LIBS += -L$(IPHONESDK)/usr/lib/
LIBS += -L$(IPHONESDK)/usr/lib/system
#################################
#包含组件
DFLAGS = -isysroot $(IPHONESDK) $(INCPATH)
#export IOS_ARCH无效,需要加参数实现CFLAGS = $(DFLAGS) -arch armv6 -arch armv7 -arch armv7s -arch i386
#################################
AR = $(DEVELOPER)/usr/bin/ar
RANLIB = $(DEVELOPER)/usr/bin/ranlib
#################################
#生成
#格式为 xxx: $@:$<
# "$@" 表示所有的目标集, 即本例中的"%.o"(hello.o)
# 如果有多个目标,"$@"就是匹配于目标中模式定义的集合
# "$<" 表示依赖目标中的第一个目标名字, 即本例中的"%.cpp"(hello.cpp)
# 如果依赖目标是以模式(即"%")定义的,那么"$<"将是符合模式的一系列的文件集
# 注意,其是一个一个取出来的
# "$^" 表示所有的依赖目标集,以空格分隔
# 如果在依赖目标中有多个重复的,那个这个变量会去除重复的依赖目标,只保留一份
#等价于
#hello.o : hello.cpp
# $(CC) $(CFLAGS) $(LIBS) -c hello.cpp -o hello.o
#all: $(PROG) $(DLIB) $(LIB)
all: $(LIB)
@echo $(OBJS)
#可执行程序
$(PROG): $(OBJS)
@echo ---------------
@echo $(PROG)
# 格式: gcc -o xxx xxx.cpp
$(CC) -o $(PROG) $^ $(CFLAGS) $(LIBS)
#动态库
$(DLIB): $(OBJS)
# 格式: gcc -shared -fpic -o libxxx.so xxx.o
# -fPIC: 位置无关代码(Position Independent Code)的首字母缩写, 保证编译生成的东西是地址无关的
# 在可执行程序装载该动态库时, 该库可以放在可执行程序内存里的任何地方
$(CC) -fpic -shared $(CFLAGS) -o $(DLIB) $<
#静态库
$(LIB): $(OBJS)
# 格式: ar -cr libxxx.a xxx.o
$(AR) -cr $(LIB) $<
$(RANLIB) $@
#object文件
$(OBJS): %.o:%.cpp
# 格式: gcc -c xxx.cpp -o xxx.o
$(CC) $(CFLAGS) -c $< -o $@
#################################
#清除
.PHONY: clean
clean:
# 加上"-"表示忽略错误继续执行
-rm $(OBJS) $(PROG) $(DLIB) $(LIB)
lipo -info libxxx.a //查看库指令集