2017-06-18 46 views
0

編輯讀取目錄中的所有源文件:我使用Linux的Fedora 22鏘3.8 C++ - 使用LibTooling

我使用鏘3.8 LibTooling LIB閱讀.cpp的源文件,解析AST,然後做一些處理我提取的數據。當我使用單個文件上的命令行或多個文件作爲輸入調用我的工具時,一切正常。

但是,如果有數十或數百個文件,將所有文件一次又一次地寫入是不可行的。那麼,有沒有辦法對付它?例如,我將所有源文件名都轉儲到txt文件中,並將其作爲輸入提供給工具,希望Clang的命令行解析器能夠從給定路徑或其他方式讀取文件?

例如這工作正常:

toolname f1.cpp f2.cpp -- 

但如何做到這一點不給所有文件名:

toolname f1.cpp .......f1000.cpp -- 

回答

1

你應該提供有關操作系統的信息,因爲它是重要的一塊。

假設你在Linux上嘗試以下操作:

toolname $(find directory -name "*.cpp") -- 

其中directory是目錄的路徑與您要處理的文件。

$(...)是linux的shell語法。它啓動括號之間的內容,並在完成之後 - 用啓動的命令的標準輸出替換整個$(...)文本。 找到是linux命令,它在目錄(及其子目錄)中搜索匹配給定條件的文件(例如,只給出-名稱--文件名,忽略目錄,必須匹配* .cpp模式)。因此,假設目錄將是/家庭/ Q有打算將三個文件:

/home/q/a.cpp 
/home/q/a.h 
/home/q/b.cpp 

推出

toolname $(find /home/q -name "*.cpp") -- 

將推出子

find /home/q -name "*.cpp" 

這將輸出

/home/q/a.cpp 
/home/q/b.cpp 

將被忽略,因爲它不符合-name模式),這將被放回原來的命令:

toolname /home/a.cpp /home/b.cpp -- 

在你可以使用Python腳本的窗口,例如案例:

import os, sys, subprocess 

toolname = os.path.abspath(sys.argv[1]) 
path = os.path.abspath(sys.argv[2]) 
args = [toolname] 
for name in os.listdir(path): 
    if name.endswith('.cpp'): 
    args.append(os.path.join(path, name)) 
sys.exit(subprocess.call(args)) 

其中第一個參數是工具路徑,第二個路徑是文件目錄(不是遞歸的)。

+0

真的很抱歉沒有提供OS信息。是的,我正在使用Linux。謝謝。我會嘗試它併發布更新。 –

+0

工程就像一個魅力。非常感謝你的幫助! :) –