2012-09-19 66 views
1

我的C++項目由多個目錄組成,每個目錄都有自己的生成文件。上一級我也有一個頂級的makefile,它依次調用其他的。vim內的遞歸生成文件

從vim中我想要做的頂級生成文件或一個子。我想在vim中看到我的錯誤,在一行上按ENTER跳轉到源代碼行。

這個工程使用

make | copen

,但只有一次一個目錄。錯誤窗口中列出的文件名稱只是一個名稱,沒有路徑。如果您嘗試構建頂級生成文件,並在文件名/行號上按Enter,則不知道該文件的路徑。

有沒有辦法解決這個問題?我想從vim內部構建最高級別的makefile,而不管錯誤所在的目錄跳轉到正確的文件。問題可能在於g ++只輸出文件的名稱,而不是路徑。

回答

2

'errorformat'內置了該機制;從:help errorformat

一些編譯器產生含有該有 被加在%f讀入文件名的目錄名的消息(比如GNU make)。以下 代碼可用於掃描這些目錄名稱;它們將被存儲在 內部目錄堆棧中。 E379 %D「輸入目錄」格式字符串;期望以下 %f找到目錄名稱 %X「離開目錄」格式字符串;希望以下%f

定義「輸入目錄」或「離開目錄」格式時,必須在該子字符串的開始處給出「%D」或 「%X」。 Vim跟蹤目錄 的更改並將當前目錄預加載到找到的每個錯誤文件的相對路徑爲 。參見| quickfix-directory-stack |瞭解詳情,技巧和 限制。

因此,您需要讓您的Makefile輸出這些「更改目錄」消息,並確保通過'errorformat'設置正確解析它們。

+0

如果你可以推薦一個很好的教程... – ScrollerBlaster

+0

除此之外沒有找到任何東西:http://stackoverflow.com/a/9428843/813602 –

+0

我需要對錯誤格式的東西感到滿意,因此目前正在尋找一些東西很好閱讀。開始閱讀vim的幫助,很快就迷上了。當我瞭解這些內容時,我會回報。 – ScrollerBlaster

0

你可以給Vim的自定義命令:make執行:

:set makeprg=make\ -f\ /path/to/your/toplevel/makefile 
+0

我試試這個,然後打開其中的一個子文件和'make | C打開」。錯誤列表包含一個沒有目錄的文件名,所以它不會打開現有文件,而是一個新的空文件。 – ScrollerBlaster

0

您可以創建在你的vim地圖以下

!find .. -type d -exec make -C {} \; 

類似:

map <F12> <esc>:!find .. -type d -exec make -C {} \;<cr> 

我相信你仍然應該看到:clist中的錯誤。

如果你想運行上層make文件,你可以這樣做:

:make -C .. | copen