Linux

如何讓 OpenWrt Makefile 編譯得更快?

  • February 7, 2020

我記錄了 OpenWrt 韌體映像的初始編譯需要 50 分鐘,假設所有必要的軟體包都已通過sudo apt-get install. 我的 BuildRoot 根目錄是openwrt.

隨後,我發現如果我重命名文件夾上方的目錄,openwrt文件中的一個小改動說wifi.lua下一個make (in openwrtfolder) 需要 21 分鐘才能成功編譯。

但是,如果我不重命名文件夾上面的openwrt目錄,在同一個文件中進行類似的小改動,下一次make V=99只需要3分鐘就可以編譯成功。

當我現在重命名上面的目錄並再次執行與上面相同的操作時,make需要 21 分鐘才能編譯成功。使用make V=99,我可以看到與我沒有重命名頂級目錄的情況相比,需要執行更多的編譯步驟。

如果我不重命名頂級目錄,我可以看到 Makefile 編譯要快得多。

這讓我想到了一個相關的問題:在 Linux 中,重命名或移動目錄會改變子目錄中文件的時間嗎?

我知道如果目標的修改時間比它的所有依賴項更新,Makefile 不會再次建構目標。

我還在閱讀有關 GNU Makefile 的一些問題:http: //www.conifersystems.com/whitepapers/gnu-make/

OpenWrt Makefile,應該比原來的 Linux Makefile 更先進,能解決部分或全部這些問題嗎?

(為了讓 Makefile 編譯得更快,我還擁有openwrt/dl一個符號連結到我的主目錄中的一個文件夾,這樣就不需要再次下載使用者空間包 tarball。)

不,它不會更改包含文件和目錄的時間戳,只會更改目錄本身。但是,如果 Makefile 包含使用絕對路徑的目標或依賴項,或者甚至只是$(src_dir)重新製作它們,b/c 它是一個不同的/新目標。有關“標準”目標和變數的約定和建議,請參閱GNU make 文件

但是,Makefile 不能編譯,並且沒有原始 Linux Makefile 這樣的東西。創建/維護像 BuildRoot 這樣的環境非常複雜,維護者可能專注於讓它在高效之前正確建構。如果一個簡單的更新檔,比如添加一個符號連結有助於加快這個過程,也許你應該把它作為上游改進的建議發送。

引用自:https://unix.stackexchange.com/questions/89120