Using Clang as a Library----Choosing the Right Interface for Your Application---翻譯

原文地址:http://clang.llvm.org/docs/Tooling.htmlhtml

譯者:史寧寧snsn1984編程



爲你的程序選擇正確的接口

       Clang爲實現須要一個程序的語法和語義信息的工具提供了基礎設施。((譯者注:爲了便於理解,再意譯一句)若是你想實現一個工具,而這個工具須要獲取一個程序的語法和語義信息,那麼恭喜你,Clang能夠爲你提供一些基礎實現。)這個文檔將給出使用不一樣的方法去實現基於Clang的工具的一個簡短介紹,包括它們的優勢和缺點。架構

LibClang

LibClang是一個穩定的高層次的Clang的C語言接口。若是不肯定LibClang是你想要用的接口,只有當你有一個好的理由不用LibClang的時候,這個時候你才能夠去用別的接口。編程語言

若是遇到以下狀況,那麼就是典型的使用LibClang的時候:工具

  • Xcode
  • Clang Python Bindings

若是遇到下列狀況,請使用LibClang:
學習

  • 想使用Clang除了C++以外的編程語言的接口
  • 須要一個穩定的接口能夠向後博啊吃兼容
  • 須要一個十分強大的高層次的抽象,好比:像一個光標同樣遍歷AST,或者不想去學習Clang的AST的全部的細節問題

若是遇到下列狀況,請不要使用LibClang:
spa

  • 想徹底控制Clang AST


Clang Plugins


Clang Plugins容許你在AST之上運行一些額外的動做,而這些動做做爲編譯的一部分。Plugins是運行的時候被編譯器加載的動態庫,她們很容易合併到你的構建環境中。
.net

若是遇到以下狀況,那麼就是典型的使用Clang Plugins的時候:
  • 你的工程有特殊的lint風格的警告或者錯誤
  • 從一個單獨的編譯步驟要建立額外的構建神器

若是遇到下列狀況,請使用Clang Plugins:
code

  • 須要你的工具去返回任何依賴關係的變化
  • 想讓你的工具去執行或者跳出一次構建
  • 須要徹底控制Clang AST

若是遇到下列狀況,請不要使用Clang Plugins:orm

  • 想在你的構建環境的外部運行工具
  • 想徹底控制Clang如何創建起來,包括內存虛文件的映射
  • 想去運行你工程中的一部分特殊的文件,而這部分文件和觸發從新構建是沒有必要聯繫的

LibTooling

LibTooling是一個C++接口,它的目標在於實現徹底獨立的工具,而這些工具就像是被集成到運行Clang工具的服務中了同樣。
若是遇到以下狀況,那麼就是典型的使用LibTooling的時候:
  • 一個簡易的語法檢查器
  • 重構工具

若是遇到下列狀況,請使用LibTooling:

  • 想在獨立於構建系統的單個文件或者一系列特殊的文件上運行工具
  • 想徹底控制Clang AST
  • 想和Clang Plugins共享代碼
若是遇到下列狀況,請不要使用LibTooling:

  • 想做爲能夠被依賴關係改變而觸發的構建系統的一部分運行
  • 想要一個穩定的接口,不須要由於AST API的改變而改變你的代碼
  • 想要一個高層次的抽象像光標和在盒子以外完成的代碼
  • 不想使用C++去實現你的工具

Clang tools是一系列基於LibTooling架構基礎之上構建的特殊的開發者工具,它們是Clang工程的一部分。它們的目標是自動化和改善C/C++開發者的核心開發活動。

咱們已經在構建或者計劃構建的做爲Clang工程的一部分例子工具備:

  • 語法檢查 (clang-check)
  • 自動修復編譯錯誤 (clang-fixit)
  • 自動代碼格式化 (clang-format)
  • 新語言標準的新特性的遷移工具(cpp11-migrate,譯者注)
  • 核心重構工具
  • -------------------------------------------------------------------------------------------結束-------------------------------------------------------------------------------------------------------------------------------
相關文章
相關標籤/搜索