Xcode中的Target,主要包含下面几点知识:

Target依赖

Build Phase

Build Rule

Target依赖

Target的依赖关系表示一个Target要构建成功,必先依赖于其他Target的构建成功。

一个Target可以依赖同一个工程里面的另一个Target,也可以依赖不同工程里面的Target。依赖不同工程里面的Target,叫做跨工程依赖(cross-project dependency)。

想要实现跨工程依赖,最简单的方法是先将被依赖的工程文件(.xcodeproj文件)拖到当前工程中,然后配置被依赖的Target。

Build Phase

Build Phase定义了一个Target需要构建成功,需要经历的步骤。

一个Target构建的时候,从上到下执行Build Phase。因此Build Phase的顺序时很重要的,比如,你不能没有编译就链接。但是,Xcode也允许我们改变Build Phase的顺序,只要将你想调整的Build Phase拖到想要的位置即可。

对于Build Phase,着重介绍一下Run Script。在Run Script中,Input Files并不是传递给脚本的参数,Output Files也不是告诉Xcode在哪里产生输出文件,Input Files和Output Files的作用,仅仅是告诉Xcode,当Input Files修改日期比Output Files新时,就需要运行脚本。如果Input Files和Output Files有一个不指定,那么脚本每次都会执行。因此,指定输入文件和输出文件,Xcode并不会自动读入文件,并输出文件到指定位置,这些都需要你在脚本里面完成。同时,在脚本里面,可以访问build settings当中的变量。

Build Rule

Build Rule定义了对于某一个类型的文件,需要进行的特殊处理。比如,你可能需要对于.c文件用自己定义个编译器编译,那么,就可以通过Build Rule来达到;如果一中文件类型需要转换成另一种文件类型,也可以使用Build Rule。

Build Rule分位系统定义的Build Rule和自定义的Build Rule,自定义的Build Rule优先级总是大于系统定义的Build Rule。Xcode在匹配Build Rule时,总是根据Build Rule定义的顺序,匹配第一个符合定义的Build Rule,这就是说,如果有两个完全相同的Build Rule,那么在前的Build Rule将被匹配。

一个Build Rule被同一个Target的所有Build Phase所共享,无法为同一个Target的不同Build Pahse定义不同的Build Rule。

在执行Build Rule的脚本的时候:

1 当前目录被设置为project folder(即包含工程文件.xcodeproj的文件夹)

2 许多与输入文件和输出文件有关的环境变量被设置,可以再脚本中使用,相关环境变量(只是一部分)如下表:

对于Build Rule中的输出文件,如果你的目的是将输出文件写到Target的build产物中,那么输出文件应该指定为TARGET_BUILD_DIR,如果你的输出文件只是作为中间文件,那么输出文件应该指定为 DERIVED_FILES_DIR。指定输出文件的目的,是为了告诉Xcode到哪里寻找这些输出文件,以便后续利用。举个例子,如果一个Build Rule将XML编译成LEX文件,而后续的Build Rule会降LEX文件编译成.c文件,那么,Xcode就会根据第一个Build Rule指定的LEX输出文件位置,作为第二个Build Rule的输入。

Xcode中的Target的更多相关文章

  1. 转一篇Xcode中利用target编译不同版本的文章

    http://www.cocoachina.com/ios/20160331/15832.html 主要说的是,不用自己定义debug宏,而是在xcode的编译配置文件中,设定debug宏,这样,不用 ...

  2. iOS开发时,在Xcode中添加多个Targets进行版本控制

    在iOS开发中,很可能有以下场景:需要开发多个版本,或因需区分收费版,免费版,或因为网络环境需要区分测试版,发布版,或因渠道不同需要区分企业版,AppStore版等等.解决办法无非就是CheckOut ...

  3. XCode中Architecturs配置及常见问题

    http://lanvige.github.io/2014/03/19/architecturs-in-xcode/ XCode 5.1升级后因arm64和CocoaPods的原因,痛了一天,终于解决 ...

  4. iOS 在 Xcode 中重命名项目名称

    本教程使用的 Xcode 版本是Xcode 6.3.1,网上有好多的教程,都是在 Xcode 4 上做的讲解,现以本文章讲解一下如何在 Xcode 6.3.1 中重命名你的项目名称,包括你的应用名称. ...

  5. 如何找出Xcode中不同版本Swift的路径

    我们知道Xcode中可能包含不知一个Swift的版本,那么我们如何找到它们对应的路径呢? 熟悉unix shell命令的童鞋都知道有一个find指令,在我们已知Xcode路径时,我们可以在其中找到Sw ...

  6. OC Xcode中常见的错误

    在开发的过程中难免会遇到很多的错误,可是当看到系统给出的英文时,又不知道是什么意思.所以这篇文章总结了Xcode中常见的一些英文单词及词组,可以帮助初学的人快速了解给出的提示.多练习,就肯定能基本掌握 ...

  7. Xcode中的文件类型

    文件类型 Xcode中的文件类型,总共4种类型: 1 普通文件(File) 2 Group(在Xcode中就是黄色的文件夹) 3 Folder(在Xcode中就是蓝色的文件夹) 4 Framework ...

  8. xcode中的预定义宏

    [xcode中的预定义宏] 1.SRCROOT,是定义本target的proj的路径. 2.OBJROOT,对象文件根路径,对象文件(即obj文件)就是中间的临时文件.中间文件输出目录的名字以“pro ...

  9. 在XCode中使用XCTest

    测试驱动开发并不是一个很新鲜的概念了.在我最开始学习程序编写时,最喜欢干的事情就是编写一段代码,然后运行观察结果是否正确.我所学习第一门语言是c语言,用的最多的是在算法设计上,那时候最常做的事情就是编 ...

随机推荐

  1. [转]DirectX and .NET[英]

    With the DirectX SDK (June 2010) release and the addition of support for Visual Studio 2010, I’ve be ...

  2. C++编写简单的Service和Client

    在上一步的基础上 编写Service节点 这里,我们将创建一个简单的service节点("add_two_ints_server"),该节点将接收到两个整形数字,并返回它们的和. ...

  3. 【OC底层】Category、+load方法、+initialize方法原理

    Category原理 - Category编译之后的底层结构是 struct categroy_t,里面存储着分类对象方法.属性.协议信息- 当程序运行时,通过runtime动态的将分类的方法.属性. ...

  4. 一图看懂hadoop MapReduce工作原理

    MapReduce执行流程及单词统计WordCount示例

  5. 小技巧textbox的行数

    没什么技术含量,但如果不知道则实现起来很麻烦. c#中textbox.lines只记录回车的数量,并不是真正的总行数,如何得到呢,请使用: int 总行数 = this.textBox1.GetLin ...

  6. JavaWeb基础—监听器Listener

    javaWeb三大组件: servlet listener(用的不多) filter 什么叫监听器: 初次相见:AWT 二次相见:SAX(XML解析时)Bundle 绑定 监听器是一个接口,内容由我们 ...

  7. Hadoop namenode启动瓶颈分析

    NameNode启动过程详细剖析 NameNode中几个关键的数据结构 FSImage Namenode会将HDFS的文件和目录元数据存储在一个叫fsimage的二进制文件中,每次保存fsimage之 ...

  8. 【LG3722】[HNOI2017]影魔

    [LG3722][HNOI2017]影魔 题面 洛谷 题解 先使用单调栈求出\(i\)左边第一个比\(i\)大的位置\(lp_i\),和右边第一个比\(i\)大的位置\(rp_i\). 考虑\(i\) ...

  9. kruskal重构树

    kruskal重构树 kruskal重构树,顾名思义,是在kruskal的时候顺便搞出来的一棵重构树,具体地说是一个堆. 先说说这个东西是怎么搞出来的吧:默认事先把边按边权从小到大排序,在kruska ...

  10. Codeforces 937 D. Sleepy Game(DFS 判断环)

    题目链接: Sleepy Game 题意: Petya and Vasya 在玩移动旗子的游戏, 谁不能移动就输了. Vasya在订移动计划的时候睡着了, 然后Petya 就想趁着Vasya睡着的时候 ...