Xcode 中 Build Setting 的两处设置

这两天在弄项目分支的时候,发现自己对项目中 build Setting 的这两个东东老是感觉迷糊,有点不清楚,特此笔记下。

  • Other Linker Flags
  • Search Paths

1、Other Linker Flags

通常我们会在这个选项中加入 ,最常用的是 -ObjC , 他们有什么作用呢?

  • -ObjC
  • -all_load
  • -force_load

一般在我们使用某些静态库的时候,里面可能有一些类的分类,正常情况下 链接器 会以为这个分类已经存在,而不去读了,导致了我们缺失了正常的功能,所以为了把这些分类和核心类的代码合起来,必要的时候我们得加上 -ObjC, 形成我们需要的可执行文件。

  • -ObjC : 链接器把静态库中所有的Objective-C类和分类都加载到最后的可执行文件中,保证都可执行。但是当 静态库中只有分类而没有类的时候,-ObjC参数就会失效了
  • -all_load: 链接器把所有找到的目标文件都加载到可执行文件中。但是可能不同的静态库使用了相同的文件导致出错
  • -force_load: 它也是让链接器把所有找到的目标文件都加载到可执行文件中,但是它需要指定进行全部加载的库文件的路径,从而保证只是完全加载了一个库文件。

总的来说,一般用 -ObjC,就算当其失效后,用 -force_load 就可以,而不用-all_load。

具体详解可阅读: 关于Xcode的Other Linker Flags

2、Search Paths

常用路径 path ,就是下面三种啦:

  • Framework Search Paths
    附加到项目中的framework 的搜索路径。

  • Library Search Paths
    附加到项目中的第三方Library的搜索路径。

  • Header Search Path
    头文件的搜索路径。

  • User Header Search Paths
    只有在Always Search User Paths为Yes时才会被搜索。

此处我们可以先来了解下:

  • $(inherited):添加目录的时候写上 “$(inherited)” 就是表示路径自己从frameworks里面读取。 默认的情况下路径配置是不被 Targets 继承的,只有当Targets的设置加入了$(inherited)时才被继承,继承来自更高一级的配置。
  • ${PODS_ROOT} : 使用 CocoaPods 时候,Pods 下的路径。有时在用cocoaPod install 完成所需要的第三方类库之后,在要用的地方导入(#import)发现不提示,需要自己手动加入,但现在很少见这种情况啦。
  • ${SDK_DIR}: 指编译目标所使用的 SDK 的目录。
/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS10.0.sdk
  • $(SRCROOT) : 代表项目工程文件目录,很好的避免其他同学使用时需要再换路径的情况。
  • $(PROJECT_DIR) : 表示当前工程文件夹目录,相对路径(相对于当前项目文件夹)。和$(SRCROOT) 区别是它代表** 整个项目 **。

如最常见的错误:

  • warning:ld: warning: directory not founder option
    查找 Library Search Paths 和 Framework Search Paths,删掉编译报warning的路径即OK。
  • warning:ld: library not found for -lPods
    在 Build Setting 中 other linker flag 里,加上$(inherited)即可。
备注参考

http://small.qiang.blog.163.com/blog/static/978493072013112571950/
http://blog.devzeng.com/blog/ios-xcode-search-paths.html
http://ship2013.blog.163.com/blog/static/22861106720131126103130568/

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 仅以方便自己查阅记录前言1.静态库和动态库有什么异同?静态库:链接时完整地拷贝至可执行文件中,被多次使用就有多份冗...
    190CM阅读 9,838评论 0 4
  • 静态库与动态库的区别 首先来看什么是库,库(Library)说白了就是一段编译好的二进制代码,加上头文件就可以供别...
    吃瓜群众呀阅读 14,158评论 3 42
  • 文件后缀名 h :头文件。头文件包含类,类型,函数和常数的声明。 .m :源代码文件。这是典型的源代码文件扩展名,...
    白屏阅读 4,895评论 0 49
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 175,911评论 25 709
  • 为什么现在善良的人越来越少,好人越来越不管闲事,我们不得不深深的思考。 或许你会说它们不是好人。可是它们心里怎么想...
    感情顾问七七阅读 2,444评论 0 2

友情链接更多精彩内容