clang編譯器簡介

本文部份內容引用:
中文維基百科
結構化編譯器前端--clang介紹前端

什麼是clang編譯器?

clang是LLVM編譯器工具集的一個用於編譯C、C++、Objective-C的前端。LLVM項目的目標是提供一個GNU編譯器套裝(gcc)的替代品,由蘋果公司的贊助開發,其源代碼受權採用的是類BSD的伊利諾伊大學厄巴納-香檳分校開源碼許可。python

clang編譯器的優點與劣勢

相比於gcc,clang具備以下優勢:git

  • 編譯速度更快:在某些平臺上,clang的編譯速度要明顯快於gcc。
  • 佔用內存更小:clang生成的AST所佔用的內存一般是gcc的五分之一左右。
  • 模塊化的設計:clang採用基於庫的模塊化設計,更易於IDE的集成及其餘用途的重用。
  • 診斷信息可讀性強:在編譯過程當中,clang會建立並保留大量詳細的元數據 (metadata),這將更有利於調試和錯誤報告。
  • 設計更清晰簡單,容易理解,易於擴展增強。與代碼基礎較爲古老的gcc相比,學習曲線會顯得更爲平緩。

當前 Clang 還處在不斷完善過程當中,相比於gcc, clang在如下方面還須要增強:github

  • 須要支持更多語言: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_llvmshell

  • 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」說明編譯器已經能夠正常工做。
test hello_ctornado

相關文章
相關標籤/搜索