美文网首页
Xcode 路径问题

Xcode 路径问题

作者: 今晚煮面 | 来源:发表于2021-02-25 11:42 被阅读0次

    Header Search Paths

    1,在xcode里 $(PROJECT_DIR)也表示当前工程文件夹目录

    2,头文件搜索路径必须指定到那一层,不过一般工程默认都是从当前工程文件夹递归查找,只有添加第三方库,或者制作静态库的时候才会用到这些

    3,$(SRCROOT)代表的是项目根目录下;$(PROJECT_DIR)代表的是整个项目

    Header Search Paths 与 User Header Search Paths 区别

    1,<>是从系统目录空间 (对应Header Search Paths)中搜索文件,

    2," " 是从用户目录空间(对应 User Header Search Paths)中搜索文件

    3,如果你把路径加到User Header Search Paths 中,而 <>无法从系统目录空间中找到新加的路径,从而报错,这个就是#import<SomeClass.h>和#import"SomeClass.h"的区别

    Library search path

    1,Library Search Paths 管理导入的*.a的路径

    Framewrok Search Path

    1,Framework Search Paths 管理导入的*.framework的路径

    绝对路径 = 搜索路径 + 相对路径

    1,Xcode Build Settings 下 Search Paths设置搜索路径,Header Search Paths:头文件搜索路径设置

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

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

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

    5,一般工作中我们最好都使用相对路径,这样在共同开发项目时,防止发生路径错误问题。Library / Header Search Paths中写法。

    6,$(SRCROOT) / 当前工程名字 / 需要包含头文件所在文件夹

    7,non-recursive:默认路径设置,不遍历该目录

    8,recursive:遍历该目录,如果路径的属性为recursive,那么编译的时候在找库的路径的时候,会遍历该目录下的所有子目录的库文件

    在Other Linker Flags中加入-ObjC或者-all_load或者-force_load

    1,-ObjC:一般这个参数足够解决前面提到的问题,这个flag告诉链接器把库中定义的Objective-C类和Category都加载进来。这样编译之后的app会变大,因为加载了很多不必要的文件而导致可执行文件变大。但是如果静态库中有类和category的话只有加入这个flag才行,但是Objc也不是万能的,当静态库中只有分类而没有类的时候,Objc就失效了,这就需要使用-all_load或者-force_load了

    2,-all_load:-all_load会强制链接器把目标文件都加载进来,即使没有objc代码。但是这个参数也有一个弊端,那就是你使用了不止一个静态库文件,那么你很有可能会遇到ld: duplicate symbol错误,因为不同的库文件里面可能会有相同的目标文件 这里会有两种方法解决 1:用命令行就行拆包. 2:就是用下面的这个参数

    3,-force_load:这个flag所做的事情跟-all_load其实是一样的,只是-force_load需要指定要进行全部加载的库文件的路径,这样的话,你就只是完全加载了一个库文件,不影响其余库文件的按需加载

    相关文章

      网友评论

          本文标题:Xcode 路径问题

          本文链接:https://www.haomeiwen.com/subject/bidlxktx.html