Clang安裝配置解釋


學習總是循序漸進的過程,之前一節我們知道怎么安裝配置clang,相當於我們知道了how to do. 這一次我們來解釋一下我們做了些什么,知道why do so.

1. Get the required tools

2. Check out LLVM clang

3. Run CMake to generate the Visual Studio solution and project files

運行CMake生成Visual Studio解決方案和工程文件。那么為什么我們在生成LLVM.sln時要用Cmake呢?它是什么工具,究竟在幫助我們干了一件什么事情呢?

我們知道,我們從SVNdownload下來的都是源文件,許多的源文件依照一定的結構和功能組織在一起,我們怎么使用這些源文件呢?怎么才能讓它們像我們用VS構建的解決方案一樣呢?對,我們需要一個把這些源文件生成我們想要看到的VS中解決方案的工具,這就是Cmake在這里的作用。

Cmake是跨平台的,可以通過編寫CMakeLists.txt配置文件,控制生成在Linux/Unix平台的Makefile或者windows下工程文件。

這里我們就知道了,利用Cmake是生成解決方案的。

4. Build Clang

我們現在得到了LLVM.sln,就可以按照我們自己熟悉的方式進行操作了。生成clang。在這個解決方案中我們看到有358個項目,全部進行進行生成,需要花費很長時間,所以我們只生成clang這個project,而不是選擇ALL_BUILD。我們在后面進行再次開發的時候,也一定會添加一些源文件,這時候我們要重新生成,但着實很坑,我們真的要用rebuild嗎?不不,下面,我們略講一點visual studio里面buildrebuild,以及runbuild之間的聯系和區別。

4.1 buildrebuild

Rebuild是對Solution下的所有項目,逐個進行 Clean+Build。不論文件更改與否;

Clean+Build是對選中的項目先執行Clean再執行Build。(如果選中Solution的話,全部Clean之后,再全部Build);

Build只是針對有更改過的文件進行編譯。而Rebuild會編譯所有。

推薦用 Clean+Build 或者Build

Build solution   ---編譯解決方案,和build“項目名”的不同之處很明顯:一個解決方案可以包含多個項目,編譯解決方案就是編譯這個解決方案中的所有項目,而build“項目名”就只是編譯當前的項目;

至於rebuild,有過很多次這樣的經歷:把一個項目解決方案編譯后,如果沒有做過任何改動,點擊build菜單命令就不會再編譯,那怕你刪除了原來編譯生成的dllexe文件,vs.net仍然會因為未檢測到項目中有新的改動而拒絕編譯,但點擊rebuild,不管上次編譯后有沒有做過改動,vs.net都會重新編譯。

(轉載自:http://www.cnblogs.com/tylerdonet/archive/2012/02/03/2336985.html

4.2 runbuild

我們都知道程序經過預處理,編譯,鏈接,然后才能運行;那么在visual studio中是如何對應的呢?在VS中我們比較常用的就是buildrun, build可以進行這三步預處理,編譯,鏈接,也就是形成了.exe或者.dll,但是沒有運行,因為有時候一個解決方案下有很多.exe,我們要執行哪一個取決於我們自己;而點擊run,就是執行預處理,編譯,鏈接,運行。這四步,就像我們執行一個打印”hello world”main.cpp,直接會運行那個.exe文件。

 5. VS build后生成的常見文件解釋

5.1 obj (objective)

中間文件,也稱為目標代碼。每個文件經過預處理和編譯后形成的中間代碼,之后與資源文件,例如一些第三方庫文件等,經過連接,生成可執行文件。

5.2 pdb (program debug database)

保存調試和項目狀態信息,從而可以對程序的調試配置進行增量鏈接。

5.3 ilk

臨時連接文件

.exe .pdb .ilk 這三個在build/Debug/bin 文件夾下非常的常見,,且成組出現。除此之外, .vcproj 是記錄vs project所有信息; .suo 就是 solution user options 解決方案的用戶選項,一種配置文件。

 

下面一節,主要講解在Windows下運行scan-build等會遇到的一些問題和如何解決,另外再簡單講一下如何讓自己的第一個checker 出現在clang checker列表里,就是我們在運行”clang -cc1 -analyzer-checker-help” 時可以看到自己定義的checker,是不是還有一點兒小激動。哈哈~

 

參考文章:

http://www.cnblogs.com/shine-yr/p/5214764.html

http://www.cnblogs.com/tylerdonet/archive/2012/02/03/2336985.html

http://www.cnblogs.com/gamesky/archive/2013/06/24/3151982.html

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM