在Xcode 4.x中编译大型源文件(10k+行)

3
我有一些源文件,每个文件的行数从20,000到120,000不等。它们由简单(非常长的)函数组成,只是对C方法(在苹果的API中,例如Quartz)的调用序列,并且应该很容易编译。

然而,Xcode花费几个小时来编译它们,并且似乎每次xcodeproj文件更改时都会强制重新编译(xcode bug?)。此外,进行归档(以上传到App Store)无论如何都会导致完全重新编译。

这些文件非常长 - 它们是代码生成工具的输出 - 我可能最终能够使它们更小 - 但肯定有办法让clang正确地处理这么长的文件吧?

我尝试过以下方法:

  1. 以32位模式运行 - 不可能:苹果现在已经删除了此功能https://stackoverflow.com/a/9791396/153422
  2. 增加更多CPU / 内核 - 可忽略的效果:clang 在大多数操作上都是单线程的
  3. 增加更多RAM - 可忽略的影响:8 GB RAM 并没有明显优于 2 GB RAM(不足为奇:这只是一个文件 - 非常不可能用完几个内存!)
  4. 添加SSD驱动器 - 小影响:稍微慢一些的笔记本电脑+ SSD比速度稍快一些的桌面电脑+普通硬盘编译速度略有提高(10%?)
  5. 禁用SVG / GIT集成 - 没有影响:苹果的 SVN 实现存在许多错误,我们已经将其关闭了 - 对于所有项目都是如此。
  6. 禁用OS X索引 - 小影响:苹果的 Spotlight / 后台索引方式存在许多问题。关闭它可以使构建时间稍微快一点 - 但也可能是因为它能使Xcode总体上更快。

大型编译项目可能会受到内存限制。内存不足确实会使构建过程变得非常缓慢。我曾经见过一些构建过程需要耗费数GB的内存。此外,根据您的文件和构建设置(例如链接),其他阶段也可能需要消耗大量内存。 - justin
抱歉,我不确定你的意思 - 就像我说的那样,在这里增加RAM没有任何效果。 - Adam
你尝试过在代码生成工具中使用不同的设置吗? - orkoden
2个回答

1
可能的方法:
  • 使用pbxbuild将您的项目转换为使用makefiles
  • 使用选项-j [n]调用gmake(尝试一个好的n)

优点:

  • 无需更改xcodeproj文件
  • 利用并行编译

我认为GNUstep不支持Xcode所针对的两个苹果平台(OS X和iOS),我的看法正确吗? - "GNUstep目前支持Unix(GNU / Linux和GNU / HURD,Solaris,NetBSD,OpenBSD,FreeBSD,Darwin)和Windows。" 我没想到在问题中加入OS标签 - 抱歉!-但我现在已经重新标记了。 - Adam

0

如果您正在生成非常长的函数(数千行长),您可能需要考虑将它们拆分为多个较小的函数。

您还可以尝试将优化级别设置为-O0或-O1。

此外,请在http://bugreporter.apple.com上提交报告。


将它们放入静态库中,然后将主项目设置为-O0会有很大帮助。-O fastest+smallest会残忍地杀死Xcode :( - Adam

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接