文章目录
前言
背景知识
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 其它主要配置可以当做扩展阅读。