本來今天應該更新《clang的python bindings(二)》的,但是根據實驗室師兄的要求,先更新這一篇。
由於專案需要,我們要針對每個開源專案中的源**檔案(.cpp,.cc,*.c)進行分析,提取其中的需要的資訊。為了保證資訊提取的準確,我們需要在每個源**檔案分析的時候加上對應的頭檔案目錄(-i),以及編譯時定義的巨集(-d)。
根據導師的建議,通過對乙個專案進行編譯,提取其編譯資訊,從中可以提取-d資訊和-i資訊。但是如何正確生成並且提取這些資訊成了問題。
經過分析我發現了如下的命令列可以相對準確的提取資訊
cd project_dir
mkdir build_dir
cd build_dir
vim cmakelists.txt
#在其開頭新增一行 set(cmake_verbose_makefile on)
cmake ../ #在其源**目錄中生成cmake資訊。
cmake --debug-output --build . #讓cmake進入debug模式,可以輸出具體的編譯資訊
cmake --build . > cmake_info
這裡採用的是根據每一行的資訊的特徵來進行提取,雖然簡單粗暴了一點,但是還算是實用。
提取編譯資訊
with open("/path/to/cmake_info","r") as f:
for line in f.readlines():
if line.find('/***x.cpp ')<>-1
and line.find(' -c ')<>-1:
#包含原始檔名字和-c的資訊為需要提取的行
#提取出開頭為-d和-i的字段資訊作為編譯頭資訊。
cmake的編譯命令提取過程
本來今天應該更新 clang的python bindings 二 的,但是根據實驗室師兄的要求,先更新這一篇。由於專案需要,我們要針對每個開源專案中的源 檔案 cpp,cc,c 進行分析,提取其中的需要的資訊。為了保證資訊提取的準確,我們需要在每個源 檔案分析的時候加上對應的頭檔案目錄 i 以及編譯...
Cmake入門(一)基本編譯命令
首先,對於最簡單的,把乙個cpp檔案編譯成乙個可執行檔案,需要對cmakelists.txt中寫入如下三步內容 宣告cmake的最低版本 cmake minimum required version 3.0 宣告乙個cmake工程 project hello 新增乙個可執行程式 add execut...
CMake的交叉編譯
概念性介紹 首先介紹一下cmake。本文是針對cmake菜鳥的,所以必須先對cmake有乙個大概的認識,知道這是什麼 怎麼用以後,才可以考慮交叉編譯不是?cmake是乙個跨平台自動編譯工具,在kde等開源專案當中有很好的應用,從而證明了cmake的強大功能。cmake的作用是根據設定的配置自動生成編...