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

文章目录

前言

背景知识

Action 详解

LaunchAction 关键配置

LaunchAction 其它主要配置

BuildAction 的关键配置

BuildAction 的其它重要配置

project.pbxproj 的 `clang-target` 配置

优化原理

优化步骤

总结

前言

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

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

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

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

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

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

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

背景知识

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

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

parallelizeBuildables = "YES"

buildImplicitDependencies = "YES">

buildForTesting = "NO"

buildForRunning = "YES"

buildForProfiling = "YES"

buildForArchiving = "YES"

buildForAnalyzing = "YES">

BuildableIdentifier = "primary"

BlueprintIdentifier = "A79DD8637E8944CF96F0A620"

BuildableName = "clang"

BlueprintName = "clang"

ReferencedContainer = "container:../../build/Xcode-DebugAssert/llvm-macosx-x86_64/LLVM.xcodeproj">

执行 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">

runnableDebuggingMode = "0">

BuildableIdentifier = "primary"

BlueprintIdentifier = "A79DD8637E8944CF96F0A620"

BuildableName = "clang"

BlueprintName = "clang"

ReferencedContainer = "container:../../build/Xcode-DebugAssert/llvm-macosx-x86_64/LLVM.xcodeproj">

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

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