iOS开发之 相对路径与绝对路径html
在iOS的工程中,尤为是在使用CocoaPods前,常常会把某个静态库或者Framework直接拖到工程中,编译运行经过,这样就能够了么? 通常咱们在xcode里面配置包含工程目录下头文件的时候,都要关联着相对路径和绝对路径,若是只是本身用这个项目,用绝对路径的问题不大,可是若是你把工程发给别人,别人就要在改这个绝对路径,这时候绝对路径的缺点立马出现。xcode
XCode用户能够 经过Header Search Paths 来配置环境变量。但这里涉及到一个另一个参数 User Header Search Paths, 这二者到底有什么区别呢? app
首先明确一点,Header Search Paths 顾名思义就是用来存放 Project 中头文件的搜索根源,没有被add到项目里的头文件,能够经过配置Header Search Paths 来引入头文件,这样的好处能够不让project 包含的文件太多,便于管理。ui
浅显一点的区别是,编码时候经过 #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 中,而 <> 没法从系统目录空间中找到新加的路径,从而报错。code
因此在修改User Header Search Paths这个选项的时候使用htm
"$(SRCROOT)/当前工程名字/须要包含头文件所在文件夹"blog
将上面的双引号里面的字符串拷贝以后,你会发现这个“$(SRCROOT)”,会自动变成当前工程因此的目录。开发
这样就能够了,发给别人,别人也不用在去修改路径了。
1.c/c++ 头文件引用问题
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”
1.
$(inherited) "$(SRCROOT) 修改.a文件的路径 --Library Search Paths
$(inherited) "$(SRCROOT)/.a文件所在的文件名"
//若是有多个.a文件格式就像这样
$(inherited) "$(SRCROOT)/xxxx" "$(SRCROOT)/xx"
若是取的是相对是绝对路径那么工程移到别的地方就有可能致使运行出错。因此要改为相对路径
2.
Other Linker Flags:其余连接标签
设为“-ObjC”
当导入的静态库使用了类别,须要设为-ObjC