xcode4 自定义静态库的编译和使用

来源:互联网 发布:禁止网络游戏软件 编辑:程序博客网 时间:2024/04/28 15:09
xcode4中的几个基本概念

工作区(Workspace):在xcode4中引入了这个概念,能够把project统一管理起来,这功能在VisualStudio中是很早就有的功能。

工程(Project):工作区里管理着一些工程,相关的源程序和资源都在这里面。

Scheme: 这个概念取代了xcode3中的Active Target, Build Configuration, and Executable settings,具体含义不太了解,但只知道它执行了一组build动作,在xcode的顶端工具条上可以快速切换不同的scheme。

构建目标(Target):构建目标指定了一系列的编译和连接设置,对于静态库就是生成一个.a文件。

还有一个group不知道是什么概念,因为在文件的location属性中有个“Relative to Group”设置。

这些一大堆概念到现在还只是略知一二,后面用的多了会理解慢慢深刻一些吧。

生成静态库

在新建工程时,需要选择“cocoa Touch Static Library”这个模板,

一阵子Next后,可以建出一个工程,我这里取名为testlib。为了测试,我建了一个类MyClass,生成MyClass.h和MyClass.m两个文件。

(1)公开头文件

要选中.h文件,将Target Membership中设置为public。

(2)设置安装路径

在 testlib的工程设置里面,找到testlib构建目标,在Build Settings中找到"Installation Directory"一项(可设置的项非常多,建议在搜索框中输入install来快速查找定位),填上 “$(BUILT_PRODUCTS_DIR)”,将Skip Install设置为Yes。

$(BUILT_PRODUCTS_DIR)这个环境变量在工作区的build/debug-iphoneos路径下,最好在构建的过程中去打开Finder看看这个目录里有什么变化。

下图的这个目录层次结构也非常重要,我把工作区和工程调整成下面这种结构了。

(3)设置公开头文件的路径

在英文的那篇博文中说将这里设置为“$(TARGET_NAME)”,是指将生成的头文件放在一个目录中,在本程序中,会在/build/debug-iphoneos/中生成一个testlib目录,在这个目录中有一个文件MyClass.h文件。

设置完成前面的三步,可以执行Build操作了,如果一切顺利,会在Products中看到libtestlib.a由红变黑了,表示这个文件生成了,点击这个文件可以看到详细信息,如果看不到,就说明哪个设置还是有问题的。

下面一步非常关键:

如果有问题,需要在xcode的系统设置中把Locations设置一下,如下图,设置完成后需重启xcode才能生效!我用xcode的默认设置,那个.a文件一直放在一个长长的非常难看的路径中,不知道apple为什么要这样做?是为了支持多个版本的静态库?

 

使用静态库

加上一个工程,我这里命名为mainprog,让它依赖testlib,我在主程序中加了一条#import "MyClass.h"语句,只要这条语句能够编译,整个工作区和工程应该设置的就没问题了。

(1)设置依赖关系

在mainprog工程的build phases中,将libtestlib.a加到link Binary With Libraries中。

(2)添加静态库的头文件搜索路径

这一步最迷惑人了,先在Build Settings中,将User Header Search Paths设置为“$(BUILT_PRODUCTS_DIR)”。

然后双击那个显示“<Multiple values>”的地方,弹出一个对话框(这个窗口隐藏的相当深,我找了足足半天才发现,一开始还以为我的xcode版本有点低呢),把Recursive勾上。

(3)设置Scheme

加上了依赖关系,按照以前VisualStudio的习惯,整个构建过程应该按照这些依赖关系的顺序来构建了吧,可发现xcode现在还没有这么聪明,需要再设置一下scheme,据说(从apple的xcode文档中查的)勾上那个Archive非常重要。

(4)让自动完成功能正常

以上转载自

http://www.cnblogs.com/chu888chu888/archive/2011/10/03/2198611.html

如下是个人补充:

使用静态库 也可以单独编译。

头文件设置 的操作都在上面有了说明。就不再提示。


这个是我个人的库, 设置 architectures 为i386(支持模拟器的lib )、 armv6\7 (支持真机设备的lib )

设置完成后,选择 这个,设置为Simulator  然后,build  

再次设置这个为ios  build 

完成后,会在我们工程文件的目标文件夹下can 生 两个文件夹


这两个CLCont 里面就是我们的库的头文件  。上面的libCLCont.a 是支持ios 设备的库 。下面的是支持模拟器的库

可使用命令将两个整合成一个库,打开终端。。进入到我们工程的build目录:

lipo –create Release-iphoneos/libCLCont.a Debig-iphonesimulator/libCLCont.a –output libCLCont.a

执行如上命令。就会在build 里面生成一个通用的libCLcont.a   .将这个库和 CLCont 拷贝到我们将要使用的工程里面。

添加库,和头文件 

ok, 下面就可以在你的文件里面 导入头文件,,,使用我们的库了。


转自:http://hi.baidu.com/qianxunlu/item/b554791a8a28c31de2f986a2

原创粉丝点击