1. 程式人生 > >cmake的編譯命令提取過程

cmake的編譯命令提取過程

cmake的編譯命令提取過程


本來今天應該更新《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('/xxxx.cpp ')<>-1 and line.find(' -c ')<>-1
: #包含原始檔名字和-c的資訊為需要提取的行 #提取出開頭為-D和-I的欄位資訊作為編譯頭資訊。