emacs裏用ebrowse解析已有的c++工程 原

在emacs.exe同級目錄下能找到ebrowse.exe,但是在eshell裏在C++工程目錄下運行ebrowse時,提示找不到ebrowse程序。

  • 這個神奇的問題,我真不知道如何解釋。用$(expand-file-name "ebrowse.exe" invocation-directory)這條命令可以解決這個問題。直接在eshell裏輸入這條命令,空格後輸入--help可以看到ebrowse的幫助文檔。  

在網上找了這麼一條命令,但對我無效。

ebrowse $(find . -name "*.[hc]pp")

 

  • 這個我糾結了很久,碰到了各種問題。首先$()這種語法在eshell裏是被當做elisp代碼直接執行的,所以命令裏的find被eshell裏認爲是一個elisp函數。可是總是報FIND語法不正確、拒絕訪問、某某文件打不開等等各種錯,越改錯越多。然後我想到這個find函數可能只是調用本機的現成的find程序來做find任務的,因此直接將這條find命令在eshell裏執行,還是報剛纔那些奇怪的錯。然後,在dos窗口下運行同樣的命令,報了同樣的錯。很明顯,elisp裏的這個find函數調用了Windows系統的find命令,這不是我想要的,因爲我對這條命令特別不熟,不知道怎麼讓它給我找出文件名符合特定規則的所有文件。於是,我用Git Bash裏的find做了這件事:find . -type f -regex ".*\.[hc]+[xp]*" -fprint srcfile_names.txt在Git Bash裏執行這條命令,可以將所有文件名後綴是.h/.c/.cc/.hpp/.hxx/.cpp/.cxx的C++代碼文件名寫入到srcfile_names.txt文件中。如果不區分後綴大小寫,可以用-iregex代替-regex選項。總之,一番漫無目的之後,我得到了包含所有C++項目源代碼文件路徑列表的文本文件。我原先本想直接將這些文件名輸出到stdin然後讓ebrowse讀取,但是ebrowse又報錯,說我提供的文件列表太長,它處理不了。 

ebrowse路徑問題搞定了,待解析的代碼文件路徑列表也搞定了,可是最後用ebrowse -f"srcfile_names.txt"解析時,又報錯,說ebrowse無寫BROWSE文件的權限。 

  • 不想再折騰文件或路徑權限問題了。直接用ebrowse -f"srcfile_names.txt" -o"D:/xxx/UE4.10-BROWSE" 命令搞定。-o參數表示把解析結果寫入到指定的文件中。解析完成後,記得把BROWSE文件拷貝到執行這條解析命令時的路徑下。

整個解析問題就搞定了。這中間折騰了很久,碰到了遠超過上面說的這些問題,各種報錯,最後畢竟還是搞定了。其中,ebrowse.exe可以直接從emacs目錄拷貝到其他地方去使用,沒有必要像我這裏expand-file-name搞那麼複雜,想從哪個目錄解析,就把ebrowse.exe拷貝到哪個目錄就行了。 用emacs打開分析結果時,直接像打開普通文件一樣C-x C-f定位到剛纔的UE4.10-BROWSE文件即可自動用Tree模式打開。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章