剖析iPhone项目中的Makefile文件

 INFOPLIST_FILE=Info.plist

Plist是property list的缩写,plist文件中包含一些命名值和使用Core Foundation类型创建的值的列表。这些类型包括CFString、CFNumber、CFBoolean、CFData、CFArray及CFDictionary等。

 

SOURCES=/

    main.m /

    NetServicesApp.m

定义变量SOURCES,用来指定源文件目标。

 

CC=/usr/local/arm-apple-darwin/bin/gcc

定义变量CC,指定编译器为gcc。

 

CFLAGS=-g -O2 -Wall

CFLAGS为传递给编译器的编译参数,如果没有定义则参数为空。

 

LD=$(CC)

LD变量被赋值为gcc的目录。

 

LDFLAGS=-Wl,-syslibroot,/usr/local/arm-apple-darwin/heavenly -lobjc -ObjC -framework CoreFoundation -framework Foundation -framework CoreGraphics -framework GraphicsServices -framework UIKit -framework LayerKit -framework CFNetwork

LDFLAGS用来指定动态Library调用的参数集合。

 

WRAPPER_NAME=$(PRODUCT_NAME).app

定义变量WRAPPER_NAME为项目名字.app。

 

EXECUTABLE_NAME=$(PRODUCT_NAME)

定义变量EXECUTABLE_NAME为项目名字。

 

SOURCES_ABS=$(addprefix $(SRCROOT)/,$(SOURCES))

在SOURCES里的所有文件前面添加前缀SRCROOT并赋值给SOURCES_ABS。

 

INFOPLIST_ABS=$(addprefix $(SRCROOT)/,$(INFOPLIST_FILE))

在INFOPLIST_FILE里的所有文件前面添加前缀SRCROOT并赋值给INFOPLIST_ABS。

 

OBJECTS=/

    $(patsubst %.c,%.o,$(filter %.c,$(SOURCES))) /

    $(patsubst %.cc,%.o,$(filter %.cc,$(SOURCES))) /

    $(patsubst %.cpp,%.o,$(filter %.cpp,$(SOURCES))) /

    $(patsubst %.m,%.o,$(filter %.m,$(SOURCES))) /

    $(patsubst %.mm,%.o,$(filter %.mm,$(SOURCES)))

首先$(filter %.c,$(SOURCES))把SOURCES里所有后缀为*.c的文件过滤出来,然后把所有的后缀名*.c改为*.o,下面分别把*.cc、*.cpp、*.m、*mm等文件的后缀名改为*.o。

 

OBJECTS_ABS=$(addprefix $(CONFIGURATION_TEMP_DIR)/,$(OBJECTS))

在所有的目标文件前面添加前缀$(CONFIGURATION_TEMP_DIR)。

 

APP_ABS=$(BUILT_PRODUCTS_DIR)/$(WRAPPER_NAME)

从上面我们知道变量WRAPPER_NAME为$(PRODUCT_NAME).app,那么APP_ABS就为最终release的产品名字的绝对路径了。

 

PRODUCT_ABS=$(APP_ABS)/$(EXECUTABLE_NAME)

定义PRODUCT_ABS变量为release产品的绝对路径或直接为产品名字。

 

all: $(PRODUCT_ABS)

定位伪目标all为最终产品的绝对路径。

 

$(PRODUCT_ABS): $(APP_ABS) $(OBJECTS_ABS)

    $(LD) $(LDFLAGS) -o $(PRODUCT_ABS) $(OBJECTS_ABS)

调用gcc编译器,并设置动态调用Library为LDFLAGS里的参数集合,编译最终的产品PRODUCT_ABS。下面都是这些编译过程的依赖关系了。

 

$(APP_ABS): $(INFOPLIST_ABS)

    mkdir -p $(APP_ABS)

    cp $(INFOPLIST_ABS) $(APP_ABS)/

 

$(CONFIGURATION_TEMP_DIR)/%.o: $(SRCROOT)/%.m

    mkdir -p $(dir $@)

    $(CC) $(CFLAGS) $(CPPFLAGS) -c $< -o $@

 

clean:

    echo rm -f $(OBJECTS_ABS)

    echo rm -rf $(APP_ABS)

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值