编译时如何看到每个文件的编译选项_导出 Clang 可视化编译耗时分析报告 —— ftimetrace 的使用...

本文介绍了如何利用Clang的-ftime-trace选项导出编译期间的耗时profile,以及如何在Chrome中查看可视化报告。通过实验,作者发现关闭CLANG_ENABLE_MODULES选项可以显著减少编译时间,但带来了需要手动添加系统framework的不便。文章探讨了Clang Modules的用途和Xcode对其的支持。
摘要由CSDN通过智能技术生成

前言

笔者最近加入了新的团队,开始负责编译打包相关工作,因而开始学习优化编译时间相关技术。讲真,蛮开心的,每天都有挑战,同时每天都有收获,天天都在涨姿势,所以想记录下来并分享出来,也方便以后自己需要时回顾。

本文主要介绍如何利用 clang 的 -ftime-trace 导出编译期间耗时 profile,是一篇基础的 step by step 文章。本文大致会介绍以下内容:

  • 简介 LLVM & Clang 和编译原理

  • -ftime-trace 介绍与使用

  • CLANG_ENABLE_MODULES 配置项引起的困惑

LLVM & Clang

Clang(发音为/ˈklæŋ/类似英文单字clang) 是一个C、C++、Objective-C和Objective-C++编程语言的编译器前端。它采用了LLVM作为其后端,而且由LLVM2.6开始,一起发布新版本。—— wikipedia

通过 Wikipedia 的介绍,可以对 LLVM 和 Clang 有一个大概了解,那么接下来就再了解编译器的设计架构模型。

fa92f3e2734331141721d45fef737ba5.png

传统静态编译器(如大多数C编译器)最受欢迎的设计是三阶段设计,其主要组件是前端,优化器和后端。前端解析源代码,检查源代码是否存在错误,并构建特定于语言的抽象语法树(AST)来表示输入代码。可以选择将 AST 转换为新的表示形式以进行优化,并且优化程序和后端在代码上运行。

07883e56dfc89b3a9dee4e1af2c12655.png

而编译的过程可以分解为以下几个阶段:

  • 预处理(Preprocessing)

  • 符号化(Tokenization)

  • 语法分析(Syntactic analysis,也叫 Parsing)语义分析(Semantic analysis)

  • 中间代码(LLVM IR, Intermidiate Code)

  • 汇编器(Assembler)

  • 链接器(Linker)

基本回顾完编译过程之后,下面就介绍如何做编译耗时分析。

Clang -ftime-trace 简介及使用

-ftime-t

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值