编译单个 Target 过程 (以 AFNetworking 为例子)
转载请注明出处!!!
一、准备工作
Build target AFNetworking of project Pods with configuration Debug
1、CreateBuildDirectory (产品 Products
最终路径: Build/Products)
命令是
builtin-create-build-directory
// 创建 build products 文件夹
CreateBuildDirectory /Users/ocean/Library/Developer/Xcode/DerivedData/MyAppName-eexzhxxmdkygpcfkoprwzzghvpkj/Build/Products (in target: AFNetworking)
cd /Users/ocean/Desktop/code/iOS/Company/Myway/MyAppName/MyAppName/Pods
builtin-create-build-directory /Users/ocean/Library/Developer/Xcode/DerivedData/MyAppName-eexzhxxmdkygpcfkoprwzzghvpkj/Build/Products
AFNetworking
文件夹内容如下:
$ cd /Users/ocean/Library/Developer/Xcode/DerivedData/MyAppName-eexzhxxmdkygpcfkoprwzzghvpkj/Build/Products/Debug-iphonesimulator/AFNetworking
$ tree
.
└── libAFNetworking.a
libAFNetworking.a
就是最终生成的静态库
2、CreateBuildDirectory (产品 Products
中间文件路径: Build/Intermediates.noindexs)
命令是
builtin-create-build-directory
// 创建 build products 临时的文件夹
CreateBuildDirectory /Users/ocean/Library/Developer/Xcode/DerivedData/MyAppName-eexzhxxmdkygpcfkoprwzzghvpkj/Build/Intermediates.noindex (in target: AFNetworking)
cd /Users/ocean/Desktop/code/iOS/Company/Myway/MyAppName/MyAppName/Pods
builtin-create-build-directory /Users/ocean/Library/Developer/Xcode/DerivedData/MyAppName-eexzhxxmdkygpcfkoprwzzghvpkj/Build/Intermediates.noindex
AFNetworking.build
内容如下:
$ cd /Users/ocean/Library/Developer/Xcode/DerivedData/MyAppName-eexzhxxmdkygpcfkoprwzzghvpkj/Build/Intermediates.noindex/Pods.build/Debug-iphonesimulator/AFNetworking.build
$ tree
.
├── AFNetworking-all-non-framework-target-headers.hmap
├── AFNetworking-all-target-headers.hmap
├── AFNetworking-generated-files.hmap
├── AFNetworking-own-target-headers.hmap
├── AFNetworking-project-headers.hmap
├── AFNetworking.hmap
├── Objects-normal (这个是编程生成的对象文件.o存放的位置)
│ └── x86_64 (架构)
│ ├── AFAutoPurgingImageCache.d
│ ├── AFAutoPurgingImageCache.dia
│ ├── AFAutoPurgingImageCache.o
│ ├── AFHTTPSessionManager.d
│ ├── AFHTTPSessionManager.dia
│ ├── AFHTTPSessionManager.o
│ ├── AFImageDownloader.d
│ ├── AFImageDownloader.dia
│ ├── AFImageDownloader.o
│ ├── AFNetworkActivityIndicatorManager.d
│ ├── AFNetworkActivityIndicatorManager.dia
│ ├── AFNetworkActivityIndicatorManager.o
│ ├── AFNetworkReachabilityManager.d
│ ├── AFNetworkReachabilityManager.dia
│ ├── AFNetworkReachabilityManager.o
│ ├── AFNetworking-dummy.d
│ ├── AFNetworking-dummy.dia
│ ├── AFNetworking-dummy.o
│ ├── AFNetworking.LinkFileList
│ ├── AFSecurityPolicy.d
│ ├── AFSecurityPolicy.dia
│ ├── AFSecurityPolicy.o
│ ├── AFURLRequestSerialization.d
│ ├── AFURLRequestSerialization.dia
│ ├── AFURLRequestSerialization.o
│ ├── AFURLResponseSerialization.d
│ ├── AFURLResponseSerialization.dia
│ ├── AFURLResponseSerialization.o
│ ├── AFURLSessionManager.d
│ ├── AFURLSessionManager.dia
│ ├── AFURLSessionManager.o
│ ├── UIActivityIndicatorView+AFNetworking.d
│ ├── UIActivityIndicatorView+AFNetworking.dia
│ ├── UIActivityIndicatorView+AFNetworking.o
│ ├── UIButton+AFNetworking.d
│ ├── UIButton+AFNetworking.dia
│ ├── UIButton+AFNetworking.o
│ ├── UIImageView+AFNetworking.d
│ ├── UIImageView+AFNetworking.dia
│ ├── UIImageView+AFNetworking.o
│ ├── UIProgressView+AFNetworking.d
│ ├── UIProgressView+AFNetworking.dia
│ ├── UIProgressView+AFNetworking.o
│ ├── UIRefreshControl+AFNetworking.d
│ ├── UIRefreshControl+AFNetworking.dia
│ ├── UIRefreshControl+AFNetworking.o
│ ├── UIWebView+AFNetworking.d
│ ├── UIWebView+AFNetworking.dia
│ └── UIWebView+AFNetworking.o
└── all-product-headers.yaml
AFNetworking.LinkFileList
: 存储的生成.a
静态库所需要链接的对象文件.o
- 每一个类都三个文件
.d
、.dia
、.o
补充介绍:每一个类都会生成
.d
.dia
.o
这三个文件
.d
: 表示这个类所依赖的其他类,即使用import
导入的头文件,会自动寻找所有的依赖头文件,包含多级依赖 (a
依赖b
,b
又依赖c
,那么最终a
也会依赖c
).dia
: 是diagnose
的简写,就是诊断的意思,我们在Xcode
写的源代码,经过编译的时候有时候会生成一些警告信息,都是放到这里面的.o
: 对象文件,.m
经过编译生成.o
文件,用来链接到静态库/可执行文件中
UIWebView+AFNetworking.d
: 打开内容如下:
dependencies: \
/Users/ocean/Desktop/code/iOS/Company/Myway/MyAppName/MyAppName/Pods/AFNetworking/UIKit+AFNetworking/UIWebView+AFNetworking.m \
/Users/ocean/Desktop/code/iOS/Company/Myway/MyAppName/MyAppName/Pods/Target\ Support\ Files/AFNetworking/AFNetworking-prefix.pch \
/Users/ocean/Desktop/code/iOS/Company/Myway/MyAppName/MyAppName/Pods/AFNetworking/UIKit+AFNetworking/UIWebView+AFNetworking.h \
/Users/ocean/Desktop/code/iOS/Company/Myway/MyAppName/MyAppName/Pods/AFNetworking/AFNetworking/AFHTTPSessionManager.h \
/Users/ocean/Desktop/code/iOS/Company/Myway/MyAppName/MyAppName/Pods/AFNetworking/AFNetworking/AFURLSessionManager.h \
/Users/ocean/Desktop/code/iOS/Company/Myway/MyAppName/MyAppName/Pods/AFNetworking/AFNetworking/AFURLResponseSerialization.h \
/Users/ocean/Desktop/code/iOS/Company/Myway/MyAppName/MyAppName/Pods/AFNetworking/AFNetworking/AFURLRequestSerialization.h \
/Users/ocean/Desktop/code/iOS/Company/Myway/MyAppName/MyAppName/Pods/AFNetworking/AFNetworking/AFSecurityPolicy.h \
/Users/ocean/Desktop/code/iOS/Company/Myway/MyAppName/MyAppName/Pods/AFNetworking/AFNetworking/AFCompatibilityMacros.h \
/Users/ocean/Desktop/code/iOS/Company/Myway/MyAppName/MyAppName/Pods/AFNetworking/AFNetworking/AFNetworkReachabilityManager.h
补充 ,使用
clang
来编译文件的一些命令如下