iOS开发之Xcode 相对路径与绝对路径

在iOS的工程中,尤其是在使用CocoaPods前,经常会把某个静态库或者Framework直接拖到工程中,编译运行通过,这样就可以了么?

一般我们在xcode里面配置包含工程目录下头文件的时候,都要关联着相对路径和绝对路径,如果只是自己用这个项目,用绝对路径的问题不大,但是如果你把工程发给别人,别人就要在改这个绝对路径,这时候绝对路径的缺点立马出现。

Xcode用户可以 通过Header Search Paths 来配置环境变量。但这里涉及到一个另外一个参数 User Header Search Paths, 这两者到底有什么区别呢?

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

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

具体一点的区别是,<> 是从系统目录空间 (对应 Header Search Paths)中搜索文件, "" 是从用户目录空间(对应 User Header Search Paths)中搜索文件。 如果你把路径加到 User Header Search Paths 中,却使用 <>导入头文件,那么程序无法从系统目录空间中找到新加的路径,从而报错。

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

绝对路径: 点击工程某个文件,右键“show in finder”打开终端,cd 把文件夹拖入,即可出现一个路径,这个就是绝对路径.
相对路径: 相对于当前工程文件的路径,“./”表示当前工程文件夹,,"../"表示上层目录 ,在xcode里“$(PROJECT_DIR)”也表示当前工程文件夹目录

这里还要了解一下在iOS中怎么代表相对路径和绝对路劲
$(SRCROOT)代表的是项目根目录下
$(PROJECT_DIR)代表的是整个项目
./也表示当前工程文件夹
../表示上层目录

以上相对路径后面拼接的必须是项目中真实文件夹名,工程内部的group无效!

1.c/c++ 头文件引用问题

include/import <> 引用编译器的类库路径下的头文件
include/import “” 引用工程目录的相对路径的头文件
include/import 都是编译指令,在编译时,编译器会将相对路径替换成绝对路径。因此,头文件的绝对路径=搜索路径+相对路径。

Xcode Build Settings 中的 Header Search Paths: 即可设置头文件搜索路径。
例如:文件test.h的路径为testDemo/libs/test.h,我们在Xcode的
Header Search Paths中添加$(SRCROOT),那么项目中引用该文件的写法为#import "libs/test.h"
如果在Header Search Paths中添加$(SRCROOT)/libs, 那么项目中引用该文件的写法为#import "test.h"

2. Other Linker Flags:“-ObjC”

当导入的静态库使用了类别,其他链接标签设需要设为-ObjC

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 211,948评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,371评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,490评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,521评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,627评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,842评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,997评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,741评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,203评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,534评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,673评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,339评论 4 330
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,955评论 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,770评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,000评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,394评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,562评论 2 349

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,633评论 18 139
  • 一般我们在xcode里面配置包含工程目录下头文件的时候,都要关联着相对路径和绝对路径,如果只是自己用这个项目,用绝...
    心有琳鑫阅读 12,480评论 0 15
  • 有时候更新了APP之后,发现了一个问题,上传附件的时候一直报错 No such file or directo...
    刘应阅读 803评论 0 1
  • #include #include 是预处理指令,在编译之前的预处理期执行。它的作用是将引入文件中的内容拷贝到当前...
    寒咯阅读 3,566评论 0 10
  • 很多时候,在iOS 导入第三方SDK包,当你引入头文件的时候,却索引不了.h的文件,即使能索引头文件,提示找不到头...
    rectinajh阅读 11,298评论 0 5