clang编译器简介

本文部分内容引用:

什么是clang编译器?

clang是LLVM编译器工具集的一个用于编译C、C++、Objective-C的前端。LLVM项目的目标是提供一个GNU编译器套装(gcc)的替代品,由苹果公司的赞助开发,其源代码授权采用的是类BSD的伊利诺伊大学厄巴纳-香槟分校开源码许可。

clang编译器的优势与劣势

相比于gcc,clang 具有如下优势:

  • 编译速度更快:在某些平台上,clang 的编译速度要明显快于gcc。
  • 占用内存更小:clang生成的AST所占用的内存通常是gcc的五分之一左右。
  • 模块化的设计:clang采用基于库的模块化设计,更易于IDE的集成及其他用途的重用。
  • 诊断信息可读性强:在编译过程中,clang会创建并保留大量详细的元数据 (metadata),这将更有利于调试和错误报告。
  • 设计更清晰简单,容易理解,易于扩展加强。与代码基础较为古老的gcc相比,学习曲线会显得更为平缓。

当前 Clang 还处在不断完善过程中,相比于 gcc,clang在以下方面还有待加强:

  • 需要支持更多语言:gcc除了支持 C/C++/Objective-C, 还支持Fortran/Pascal/Java/Ada/Go等其他语言。clang目前基本上只支持C/C++/Objective-C/Objective-C++这四种语言。
  • 需要加强对C++的支持:clang对C++的支持依然落后于gcc,clang还需要加强对C++ 提供全方位支持。
  • 需要支持更多平台:由于gcc流行的时间比较长,已经被广泛使用,对各种平台的支持也很完备。clang目前支持的平台有 Linux/Windows/Mac OS。

安装LLVM + clang

二进制安装

  • 纯Windows环境:
    可以从http://llvm.org/releases/下载相应的安装包进行安装。目前最新版本为3.8
    install_llvm.png
  • cygwin下的apt-cyg:
    apt-cyg install clang
  • Linux下的yum:
    sudo yum install clang
  • Linux下的apt-get(有时候需要自己配置一下相关的软件源):
    sudo apt-get install clang-3.4 clang-3.4-doc libclang-common-3.4-dev libclang-3.4-devlibclang1-3.4 libclang1-3.4-dbg libllvm-3.4-ocaml-dev libllvm3.4 libllvm3.4-dbg lldb-3.4 llvm-3.4 llvm-3.4-dev llvm-3.4-doc llvm-3.4-examples llvm-3.4-runtime clang-modernize-3.4 clang-format-3.4 python-clang-3.4 lldb-3.4-dev

源码安装

  • 第一步,下载llvm代码:
    git clone git@github.com:llvm-mirror/llvm.git 
  • 第二步,进入llvm/tools目录并下载clang代码
    cd llvm/tools
    git clone git@github.com:llvm-mirror/clang.git
  • 第三步,进入llvm/projects目录并下载compiler-rt代码:
    cd ../projects
    git clone git@github.com:llvm-mirror/compiler-rt.git
  • 第四步,在llvm所在目录新建与llvm同一级的目录build,并在其中构建llvm和clang:
    cd ../..
    mkdir build
    cd build
    ../llvm/configure --enable-optimized --enable-assertions
    make
    make install

使用clang编译C程序

clang的用法与gcc基本相同,我们可以写一个脚本来验证一下编译器是否已经安装完成:

import os
import sys
import shutil

if not len(sys.argv) in range(2, 3):
    print("Usage: hello_c.py <compiler>") 
    exit(1)

code = "#include <stdio.h>\n int main(void) { printf(\"hello world!\\n\"); return 0;} "

if(not os.path.exists("example")):
    os.mkdir("example")

file = open(r"example/hello.c",'w')
file.writelines(code)
file.close()
    
cmd = sys.argv[1] + r" example/hello.c -o example/test.exe"
os.system(cmd)
os.system(r"example/test.exe")

if(os.path.exists("example")):
    shutil.rmtree("example")

然后,我们只需要在shell中输入python hello_c.py clang即可,如果看到输出一行“hello world”说明编译器已经可以正常工作。

cygwin

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 前言 2000年,伊利诺伊大学厄巴纳-香槟分校(University of Illinois at Urbana-...
    星光社的戴铭阅读 16,189评论 8 180
  • LLVM 简介 LLVM 全称是 Low Level Virtual Machine,它是源自 the Unive...
    juniway阅读 38,743评论 0 21
  • GCC,LLVM,Clang编译器对比 在XCode中,我们经常会看到这些编译选项(如下图),有些人可能会有些茫然...
    狂风无迹阅读 7,890评论 1 8
  • 编译器做些什么? 本文主要探讨一下编译器主要做些什么,以及如何有效的利用编译器。 简单的说,编译器有两个职责:把 ...
    评评分分阅读 4,868评论 1 5
  • 昨天,赶在国庆长假回老家前,特地把买好的两提卷纸,送到澹台湖大公园看厕所大姐手上,长假期间逛公园的人一定特别...
    毕致近视弱视防治阅读 1,117评论 0 0

友情链接更多精彩内容