我正在 xcode 中构建几个 C++ 文件,这些文件需要大量内存来编译(+1 GB / 文件)。因为我在我的双核笔记本电脑上执行此操作,所以 xcode 使用 2 个线程进行构建。这两个线程最终将同时构建占用大量内存的文件,因此系统遭受内存不足,编译几乎停止。
对我来说,一个足够的解决方案是强制 Xcode 只使用一个构建线程。有人知道改变 Xcode 使用多少构建线程的方法吗?
对于那些感兴趣的人,C++ 文件包含一个相当大的 boost::spirit::qi 解析器。
我正在 xcode 中构建几个 C++ 文件,这些文件需要大量内存来编译(+1 GB / 文件)。因为我在我的双核笔记本电脑上执行此操作,所以 xcode 使用 2 个线程进行构建。这两个线程最终将同时构建占用大量内存的文件,因此系统遭受内存不足,编译几乎停止。
对我来说,一个足够的解决方案是强制 Xcode 只使用一个构建线程。有人知道改变 Xcode 使用多少构建线程的方法吗?
对于那些感兴趣的人,C++ 文件包含一个相当大的 boost::spirit::qi 解析器。
Xcode 用于执行任务的线程数由PBXNumberOfParallelBuildSubtasks
选项控制。您可以使用以下命令更改它: - defaults write com.apple.Xcode <key> <value>
。例如:
defaults write com.apple.Xcode PBXNumberOfParallelBuildSubtasks 8
有关更多详细信息,请参阅Xcode 用户默认值。
还有许多其他方法可以加快编译速度,从预编译头文件到分布式构建。有关这方面的更多信息,请阅读减少构建时间。
祝你好运!
使用 XCode 5,您可以使用-parallelizeTargets
和 . 根据:-jobs NUMBER
xcodebuild
xcodebuild --help
-parallelizeTargets build independent targets in parallel -jobs NUMBER specify the maximum number of concurrent build operations
对于 Xcode 4,您必须设置 IDEBuildOperationMaxNumberOfConcurrentCompileTasks 用户默认值,例如:
defaults write com.apple.dt.Xcode IDEBuildOperationMaxNumberOfConcurrentCompileTasks 4
注意“dt”。这不会影响命令行上的 xcodebuild。为此,请使用类似
xcodebuild -IDEBuildOperationMaxNumberOfConcurrentCompileTasks=4 ...
(参见http://lists.apple.com/archives/xcode-users/2011/Apr/msg00403.html和http://lists.apple.com/archives/xcode-users/2011/Jul//msg00377.html )
一个构建任务不应该两次做同样的工作,当然也不应该同时做!将大量通用代码分解到一个静态库中,以便只有在它发生更改时才能重新编译。在您的应用程序中对静态库和静态库产品中的链接设置目标依赖关系。然后,对应用程序其余部分的更改将不再需要重新构建静态库,这将大大加快构建时间。
在将 Xcode 作为一个整体进行操作之前,请尝试用尽所有项目级别的解决方案。很容易将 Xcode 削弱为只使用单个线程,而当您继续进行新项目时忘记将其更改回来。Xcode User Default Reference记录了许多未通过 Preferences 界面公开的选项,包括:
PBXNumberOfParallelBuildSubtasks(正整数)
这允许您将 Xcode 限制为在它编译的每个项目上仅使用n 个构建线程。
BuildSystemCacheSizeInMegabytes(正整数,默认 1024)
BuildSystemCacheMinimumRemovalAgeInHours(正整数,默认 24)
增加 PCH 缓存大小和保留时间有助于加快构建速度。