我们将会了解到和 Clang 相关的两个特性:
- 如何使用头文件映射(header map)来将 Xcode 构建系统产生的信息传递到 Clang 编译器;
- 如何使用 Clang 模块(modules)来加速构建;
什么是 Clang ?
苹果公司的 C 语言家族的官方编译器:
- C
- C++
- Objective-C
- Objective-C++
其实,Swift 也需要使用 Clang。
编译器会为每一个输入文件生成一个之后用于链接的输出文件。
如果你需要访问一个 iOS API 或者调用你自己的实现,你通常需要在代码中包含一个头文件。
头文件就是一个承诺,承诺实现部分存在而且与声明内容相符。
如果你只更新了头文件但是忘了更新相应的实现,在编译阶段是不会发生错误,但是在链接阶段会出现问题。
现在,让我们结合实例程序 PetWall 来理解如何处理头文件。
实例程序 PetWall 内部混合使用了多种语言。
程序主体部分采用了 Swift 编写。
使用了一个用 Objective-C 编写的库 PetKit。
还使用了一个用 C++ 编写的库 PetSupport。
现在,这个应用的体积随着时间开始膨胀。
我们决定把 Cat 相关的文件移到另一个文件夹中,但是不改动任何实现文件。