【问题标题】:Xcode - Profile and Optimize C++ Compile TimesXcode - 分析和优化 C++ 编译时间
【发布时间】:2017-02-26 22:57:52
【问题描述】:

如何使用 Xcode 分析和优化 C++ 编译时间?

我目前正在开发一个基于 Cocos2d-x 的 C++ 游戏项目,其中包含 250 多个源文件。编译时间(没有 Cocos2d-x)目前约为 3.5 分钟,我想知道编译器在哪里花费的时间最多,以及我可以做些什么来优化它。

我已经做了最明显的事情,比如总是做前向声明并应用“包含你使用的东西”范式。

编译器是 Xcode 8 的最新 Clang/LLVM。

【问题讨论】:

  • 您使用的是预编译头文件吗?这让我在没有它们的情况下继承了一个项目的加速因子 4。

标签: c++ xcode clang llvm compile-time


【解决方案1】:

尝试创建一个目录/tmp/xcode_build_timings,然后重建您的项目。 (之后不要忘记删除它)。

【讨论】:

  • 这听起来很有趣....你能说得更具体一点吗?它有什么作用?文件夹到底应该在哪里等等?
  • 我提供了文件夹的确切路径。所以我不明白您所说的“文件夹应该在哪里”是什么意思?然后在创建此文件夹后尝试构建您的项目,并检查内容。它应该为构建提供时间。
  • 好吧,有道理。
【解决方案2】:

您可以随时尝试 ccache。如果我在项目设置中重新定义CC,那么在 Xcode 中工作得很好。 https://ccache.samba.org/

例如,通过brew install ccache 安装ccache。 然后制作一个您保留在项目源代码管理中的脚本,如下所示:

#!/bin/sh
if type -p /usr/local/bin/ccache >/dev/null 2>&1; then
  export CCACHE_CPP2=true
  exec /usr/local/bin/ccache "${DEVELOPER_DIR}/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang" "$@"
else
  exec "${DEVELOPER_DIR}/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang" "$@"
fi

例如,称之为“ccache-clang”。将此脚本存储在项目的源代码管理中意味着您可以在另一台没有安装 ccache 的机器上检查它,然后它将只使用默认的 Clang 编译器。

然后在 Xcode 中,在项目的构建设置下,添加“CC”的“用户定义”设置,并将其设置到脚本的路径中。例如“${PROJECT_DIR}/ccache-clang”。

这篇文章是实现这一目标的绝佳资源。 https://pspdfkit.com/blog/2015/ccache-for-fun-and-profit/

【讨论】:

  • 但是 Xcode 不是已经这样做了吗?您在哪里重新定义 CC 以及对哪个价值?它有助于分析或优化吗?请更深入地了解您的具体工作和取得的成就;)
  • Xcode 尽可能避免重新编译文件,但 ccache 实际上会从磁盘缓存中完成编译,因此即使是干净的重建也会快得多。我添加了更详细的说明
  • 我现在已经设置好了,它似乎工作得很好,但它并没有带来很大的改进(还)。我到处都有一些缓存命中,但大多数时候它都是新编译的。我还尝试使用文章中的设置。你对我有什么额外的提示吗?
  • 该问题的一部分可能是因为 Xcode 使用了派生数据文件夹。您可以尝试将该文件夹固定到特定位置,与构建输出相同。我不记得这些设置,但是因为 ccache 使用文件路径作为键的一部分,所以 Xcode 管理事物的方式可能会导致更多的错误
  • 啊,是的……这很有道理。这可能与 ccache base_dir 有关吗?您是否将其设置为某个值/派生文件夹或源文件夹?
猜你喜欢
  • 2021-08-31
  • 1970-01-01
  • 1970-01-01
  • 2018-08-25
  • 2012-03-21
  • 1970-01-01
  • 2014-02-21
  • 1970-01-01
相关资源
最近更新 更多