Objective c 如何加速iOS Xcode编译

Objective c 如何加速iOS Xcode编译,objective-c,xcode,codenameone,Objective C,Xcode,Codenameone,我有两个基于LLVM Objective-C/C的项目,有1万行代码和1.5万行代码 由于某些不清楚的原因,150万LoC项目编译速度更快。它不使用预编译头,我也找不到任何解释 我添加了预编译头并包括了最大的缺点,我禁用了dSYM生成,使代码只编译arm7(而不是7s),将优化量减少到了O3。尽管构建速度慢得多,项目在结构上非常相似,但我看不出有任何重大差异可以证明构建速度慢 更快的构建项目是使用旧版本的xcode构建的,但两者都是使用xcode 5编译的。我注意到,将c语言方言从GNU99更改

我有两个基于LLVM Objective-C/C的项目,有1万行代码和1.5万行代码

由于某些不清楚的原因,150万LoC项目编译速度更快。它不使用预编译头,我也找不到任何解释

我添加了预编译头并包括了最大的缺点,我禁用了dSYM生成,使代码只编译arm7(而不是7s),将优化量减少到了O3。尽管构建速度慢得多,项目在结构上非常相似,但我看不出有任何重大差异可以证明构建速度慢


更快的构建项目是使用旧版本的xcode构建的,但两者都是使用xcode 5编译的。

我注意到,将c语言方言从GNU99更改为C99可以使编译速度提高一倍左右

我们还注意到,广泛使用宏(定义语句),特别是嵌套宏在xcode上的速度非常慢。尽可能多地删除这些内容也有很大帮助,我们的编译速度现在提高了2-3倍


更新:因为我们还发现,头中的include和通常过度使用include语句也是导致性能问题的原因之一。通过减少include的数量,我们能够进一步提高编译速度,远远超过原来的项目。我错误地认为,由于使用SSD和缓存,使用典型的C#ifdef来防止双重包含足以使编译速度加快,但出于某种原因,使用这种包含似乎LLVM非常慢。

我注意到,将C语言方言从GNU99改为C99会使编译速度大约翻倍速度

我们还注意到,广泛使用宏(定义语句),特别是嵌套宏在xcode上的速度非常慢。尽可能多地删除这些内容也有很大帮助,我们的编译速度现在提高了2-3倍


更新:因为我们还发现,头中的include和通常过度使用include语句也是导致性能问题的原因之一。通过减少include的数量,我们能够进一步提高编译速度,远远超过原来的项目。我错误地认为,由于使用了SSD和缓存,使用典型的C#ifdef来防止双重包含足以使编译速度加快,但出于某种原因,LLVM使用此类包含似乎非常慢。

您应该研究Objective-C模块:自xcode 5以来的编译器优化。这可以通过在代码中使用
@import
而不是
#import
来加快编译速度。 通过使用此语句,编译器只导入导入的框架中使用过的类,而不是该框架中包含的所有头文件

更多信息:

以下是WWDC 2013年会议的介绍: 会议404:目标C的进展


您应该研究Objective-C模块:自xcode 5以来的编译器优化。这可以通过在代码中使用
@import
而不是
#import
来加快编译速度。 通过使用此语句,编译器只导入导入的框架中使用过的类,而不是该框架中包含的所有头文件

更多信息:

以下是WWDC 2013年会议的介绍: 会议404:目标C的进展


有任何自定义构建阶段吗?那可能是不必要的重建……我不这么认为。忘记提到两个项目都不使用ARC。还要检查“启用模块”设置。是否有“外部”目标?i、 e.进行构建?同样的潜在问题。。。如果您只是在一个文件中更改代码并点击build(例如构建),我不会期望花费大量时间来构建。(除非这些更改是在一个使用了很多其他地方的.h文件中)如果启用模块设置为“是”并且在旧项目中丢失,它会做什么?我们没有外部目标,这是针对构建服务器的,因此它始终是通过xcodebuild执行的干净构建。有自定义构建阶段吗?那可能是不必要的重建……我不这么认为。忘记提到两个项目都不使用ARC。还要检查“启用模块”设置。是否有“外部”目标?i、 e.进行构建?同样的潜在问题。。。如果您只是在一个文件中更改代码并点击build(例如构建),我不会期望花费大量时间来构建。(除非这些更改是在一个使用了很多其他地方的.h文件中)如果启用模块设置为“是”并且在旧项目中丢失,它会做什么?我们没有外部目标,这是针对构建服务器的,因此它始终是通过xcodebuild执行的干净构建。谢谢,请参阅上面评论部分的讨论。大部分代码都是C语言的,所以这可能不会有什么大的区别。objective-C代码在两个项目之间几乎相同,因此无法解释差异。谢谢,请参阅上面评论部分中的讨论。大部分代码都是C语言的,所以这可能不会有什么大的区别。objective-C代码在两个项目之间几乎相同,因此无法解释差异。