从 5 分钟到 30 秒,如何优化clang 工程的增量编译耗时

本文探讨了如何优化clang工程的增量编译耗时,从原本的5分钟缩短到30秒。通过分析Xcode的编译过程,包括LaunchAction和BuildAction的配置,提出关闭隐式依赖查找、保留必要依赖等步骤,为大型项目节省大量编译时间。
摘要由CSDN通过智能技术生成

前言

本文中的编译根据上下文有不同的含义,请注意区分。

  • 编译原始概念是指:将 a.m 编译为 a.out

  • 本文中,也可以用来表示根据项目产出构建产物(可选的附带执行部分脚本、文件复制等操作)

笔者每次进行 clang 工程编译时,都会被编译耗时困扰。 clang 每次编译都在5分钟左右。

首先,先提供一份效果对比图。

图1,如下所示,笔者在只改动 1 行代码时,编译速度耗时 300.1 秒。

图2,经过简单的处理,编译速度被优化到 28.6 秒。

背景知识

当我们执行点击 运行 按钮时,Xcode 会执行以下步骤:

  • 执行 BuildAction ,为后续的 LaunchAction 做准备

     <BuildAction
        parallelizeBuildables = "YES"
        buildImplicitDependencies = "YES">
        <BuildActionEntries>
           <BuildActionEntry
              buildForTesting = "NO"
              buildForRunning = "YES"
              buildForProfiling = "YES"
              buildForArchiving = "YES"
              buildForAnalyzing = "YES">
              <BuildableReference
                 BuildableIdentifier = "primary"
                 BlueprintIdentifier = "A79DD8637E8944CF96F0A620"
                 BuildableName = "clang"
                 BlueprintName = "clang"
                 ReferencedContainer = "container:../../build/Xcode-DebugAssert/llvm-macosx-x86_64/LLVM.xcodeproj">
              </BuildableReference>
           </BuildActionEntry>
        </BuildActionEntries>
     </BuildAction>
    
  • 执行 LaunchAction,运行程序

     <LaunchAction
        buildConfiguration = "Debug"
      selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
        selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
      launchStyle = "0"
        useCustomWorkingDirectory = "NO"
        ignoresPersistentStateOnLaunch = "NO"
        debugDocumentVersioning = "YES"
        debugServiceExtension = "internal"
        allowLocationSimulation = "YES">
        <BuildableProductRunnable
           runnableDebuggingMode = "0">
           <BuildableReference
              BuildableIdentifier = "primary"
              BlueprintIdentifier = "A79DD8637E8944CF96F0A620"
              BuildableName = "clang"
              BlueprintName = "clang"
              ReferencedContainer = "container:../../build/Xcode-DebugAssert/llvm-macosx-x86_64/LLVM.xcodeproj">
         </BuildableReference>
        </BuildableProductRunnable>
     </LaunchAction>
    

    Action 详解

    下面会重点讲解两个 Action 的各种配置参数。

    阅读本文可以只看LaunchAction 关键配置BuildAction 关键配置LaunchAction 其它主要配置BuildAction 其它主要配置可以当做扩展阅读。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值