Xcode 配置 路径

来源:互联网 发布:编程求解一元二次方程 编辑:程序博客网 时间:2024/05/29 15:48


OS include 、import、@class 

#include


区分#include <x.h>与#include "x.h"的作用

#include <x.h>:它用于对系统自带的头文件的引用,编译器会在

系统文件目录下去查找该文件.
#include "x.h":用户自定义的文件用双引号引用,编译器首先会

在用户目录下查找,然后到安装目录中查找,最后在系统文件中查找。

在使用#include的时候要注意处理重复引用(这也是objc中#include与#import的区别)

例如:ClassA与ClassB同时引用了ClassC,不做重复引用处理的时候在ClassD中同时引用ClassA,ClassB编译会提示对ClassC重复引用的错误.

我们可以:#ifndef _CLASSC_H#define _CLASSC_H

#include "ClassC"

#endif这样处理在编译时就不会有重复引用的错误出现(在objc中

#import解决了这个问题,这是它们的区别)#import

#import大部分功能和#include是一样的,但是他处理了重复引用的问题,我们在引用文件的时候不用再去自己进行重复引用处理.

@class

主要是用于声明一个类,告诉编译器它后面的名字是一个类的名字,而这个类的定义实现是暂时不用知道的,后面会告诉你.也是因为在@class仅仅只是声明一个类,所以在后面的实现文件里面是需要去#import这个类,这时候才包含了这个被引用的类的所有信息。

综上所述#include,#import与@class的区别可以做一下理解:

#include与#import在引用一个类的时候会包含这个类的所有信息包括变量方法等,但是这样做会对编译效率造成影响.比如有100个类都#import了ClassA,那么在编译的时候这100个类都会去对ClassA处理.又比如A被B引用,B被C引用,C被D引用.....此时如果A被修改,那么后面的B,C,D.....都需要重新进行编译.还有一个用法会引起编译错误的就是在ClassA中#import ClassB 在ClassB中#import ClassA那么在编译的时候也会出现未知错误。


所以一般来说,在interface中引用一个类,就用@class,它会把这个类作为一个类型来使用,而在实现这个interface的文件中,如果需要引用这个类的实体变量或者方法之类的,还是需要import这个在@class中声明的类。 

Header Search Paths:
Header Search Paths 顾名思义就是用来存放 Project 中头文件的搜索根源,没有被add到项目里的头文件,可以通过配置Header Search Paths 来引入头文件,这样的好处可以不让project 包含的文件太多,便于管理

编码时候通过#include 引入头文件的方式有两种 <> 和 ""。<> 是只从 Header Search Paths 中搜索, 而"" 则能从  Header Search Paths 和  User Header Search Paths 中搜索。换言之 ,假如你把 路径加到  User Header Search Paths 中,那么 你用 #include <file.h> 的方式去引入对应的头文件,就会报错。 如果加到  Header Search Paths,  就没有问题了。

<> 是从系统目录空间 (对应 Header Search Paths)中搜索文件, "" 是从用户目录空间(对应 User Header Search Paths)中搜索文件。


所以在修改User Header Search Paths这个选项的时候使用
"$(SRCROOT)/当前工程名字/需要包含头文件所在文件夹"
将上面的双引号里面的字符串拷贝之后,你会发现这个“$(SRCROOT)”,会自动变成当前工程所在的目录。
这样就可以了,发给别人,别人也不用在去修改路径了。

include  <> 引用编译器的类库路径下的头文件

include  “” 引用工程目录的相对路径的头文件 

include 是编译指令,在编译时,编译器会将相对路径替换成绝对路径,因此,头文件绝对路径=搜索路径+相对路径。

Xcode Build Settings 下 Search Paths设置搜索路径

Header Search Paths:头文件搜索路径设置

$(SRCROOT)宏和$(PROJECT_DIR)宏都指xxx.xcodeproj所在的父目录

 

例如:引用工程testDemo/scr/test.h 头文件,

Header Search Paths中添加$(SRCROOT),引用为include “scr/test.h"

如果在Header Search Paths中添加$(SRCROOT)/scr,那么头文件引用直接引用 include “test.h”


$(inherited) "$(SRCROOT) 修改.a文件的路径 --Library Search Paths

 $(inherited) "$(SRCROOT)/.a文件所在的文件名"

  //如果有多个.a文件格式就像这样

$(inherited)
"$(SRCROOT)/xxxx"
"$(SRCROOT)/xx"

 如果取的是相对是绝对路径那么工程移到别的地方就有可能导致运行出错。所以要改成相对路径
$(inherited)
执行到inherited这一行的时候,自动执行父类的相关代码,执行完后再回来执行子类的

1 0
原创粉丝点击