大型項目的依賴頭我工作的一個非常大的規模的項目,在編譯時間很長。我可以在Linux上使用哪些工具(最好是開放源代碼)來查找包含最多的文件並優化它們的使用? 爲了更清楚,我需要一個工具,它會給出依賴關係,告訴我哪些頭是最包含的。順便說一句,我們使用分佈式編譯如何找到在Linux上
回答
IIRC GCC可以創建相關文件。
你可能想看看分佈式的編譯,例如參見distcc
工具,比如doxygen(與graphviz的選項一起使用)可以生成依賴關係圖包含文件...我不不知道他們是否會爲你想要做的事提供足夠的概述,但這可能值得嘗試。
這不是你正在搜索的內容,它可能不容易設置,但可能你可以看看lxr:lxr.linux.no是一個可瀏覽的內核樹。
在搜索框中,如果你輸入一個文件名,它會在那裏它被包含給你。 但是,這仍然是猜測,它不跟蹤鏈式依賴關係。
也許
strace -e trace=open -o outfile make
grep 'some handy regex to match header'
如果你想知道哪些文件包含最重要的是,使用這個bash命令:
發現。 -name '的.cpp' -exec egrep的「^ [:空間:]的#include [[:空間:]] + [ 「<] [[:阿爾法:] [:數字:] _] + [」> ]'{} \;
|排序| uniq -c | sort -k 1rn,1
|頭-20
它會顯示排名前20的文件,其中包括的次數排名。
說明:第1行找到的所有* .cpp文件,並從中「的#include」指令提取線。第二行計算每個文件包含的次數,第三行包含20個主要包含的文件。
還沒有檢查過,但如果使用兩個不同的路徑包含相同的文件,則解決方案將不起作用。即#include
使用「粘在一起很多小工具」的Unix哲學我建議編寫與-M(或-MM)和-MF(OUTFILE)選項(如詳細here)調用gcc的一個簡短的腳本。這將爲make工具生成依賴項列表,然後您可以輕鬆解析(相對於直接解析源文件)並提取出所需的信息。
答案here將爲您提供跟蹤#include依賴關係的工具。但是沒有提到優化等。另外:「大規模C++軟件設計」一書應該有所幫助。
從源樹的根級別,並執行以下(\ t爲製表符):
find . -exec grep '[ \t]*#include[ \t][ \t]*["<][^">][">]' {} ';'
| sed 's/^[ \t]*#include[ \t][ \t]*["<]//'
| sed 's/[">].*$//'
| sort
| uniq -c
| sort -r -k1 -n
第1行得到的所有包括線。 第2行除去實際文件名前的所有內容。 第3行剝離行的末尾,只留下文件名。 第4行和第5行計算每條唯一行。 第6行按行數倒序排序。
使用ccache。它會將輸入散列到一個編譯中,並緩存結果,這將大大提高這些編譯的速度。
如果你想檢測多張包括,這樣你就可以刪除它們,你可以使用makedepend作爲尤利安Şerbănoiu提示:
makedepend -m *.c -f - > /dev/null
會給出警告每個多個包含。
頁面中找到的Bash腳本不是很好的解決方案。它只適用於簡單的項目。實際上,在大型項目中,像在頁眉中描述的那樣,經常使用C預處理器(#if,#else,...)。只有好的軟件比較複雜,比如makedepend或scons可以提供很好的信息。 gcc -E可以提供幫助,但在大型項目中,其結果分析是浪費時間。
- 1. Linux下如何找到EXEC
- 2. 如何在Linux中找到'temp'目錄?
- 3. 如何找到在linux -exec CD/UNIX
- 4. 在Linux上找不到字體名稱
- 5. Gradle編譯在Linux上找不到tornadofx
- 6. Gradle「找不到Tools.jar」在Linux上
- 7. 在Linux系統上找不到圖像
- 8. Lua中無法找到在Linux上
- 9. 如何在Linux上找到Java或JRuby中的PID?
- 10. 如何找到在Linux上讀取文件夾
- 11. 如何在Linux機器上找到MySQL備份腳本/命令
- 12. 如何在Linux上
- 13. 如何找到我的Linux機器上的主要IP地址?
- 14. linux上找不到pathfind命令
- 15. 如何查找現在在linux上編寫的文件?
- 16. 如何設置在Linux上
- 17. 如何在Linux中設置CLASSPATH讓grails找到外部配置?在linux下爲
- 18. 如何找出爲什麼JVM忽略在Linux上kill -15(SIGTERM)?
- 19. 如何在Linux集羣上查找節點名稱
- 20. 如何在Linux上使用C/C++執行DNS查找?
- 21. 如何在頁面上找到GridView
- 22. 如何在此頁面上找到iframe?
- 23. 如何在alertview上找到indexpath?
- 24. 如何在Mac上找到主密碼?
- 25. 如何在窗口上找到JETTY_HOME
- 26. 如何在Ubuntu 10.04上找到httpd.conf
- 27. 如何在地圖上找到指針?
- 28. 如何在wordpress上找到我的php.ini?
- 29. 如何在屏幕上找到圖案?
- 30. 如何在UIwindow上找到觸摸?
爲了更清楚,我需要一個工具,它會給出依賴關係,告訴我哪些頭文件是最包含的。 順便說一句,我們使用分佈式編譯 – user12371 2008-09-17 07:59:11
也許你應該編輯你的問題,以包括這些信息,而不是將它作爲評論? – Daemin 2008-09-17 08:18:57