背景寫一個Makefile其他Makefile文件是可包含的
我有一個(大)項目A和(大)項目B,使得A依賴於B.
我想有兩個獨立的makefile - 一個用於項目A,另一個用於項目B - 用於性能和可維護性。
基於comments到an earlier question,我決定完全重寫B的makefile,使A的makefile可以include
它。這將避免遞歸make的罪惡:允許並行,不重拍不必要,提高性能等
目前的解決方案
我可以包括在找到當前正在執行的makefile文件的目錄(在任何其他包含之前)。
TOP := $(dir $(lastword $(MAKEFILE_LIST)))
我寫每個目標作爲
$(TOP)/some-target: $(TOP)/some-src
和更改任何必要的外殼命令,例如find dir
至find $(TOP)/dir
。
雖然這解決了它有幾個缺點引起的問題:
目標和規則更長,有點不太可讀。 (這可能是不可避免的,模塊化是有代價的)。
使用
gcc -M
來自動生成依賴關係需要後處理以添加$(TOP)
無處不在。
這是通常的方式來寫其他人可以include
d的makefiles嗎?
使用'-MMD -MP'你根本不需要後處理。我建議你向我們展示你的makefile。 – Chnossos
@Chnossos,你能否詳細說明'-MMD -MP'? –
'-MMD'將爲每個'.o'文件生成'.d'依賴文件,並且包含用戶頭文件的規則。 '-MP'指示CPP爲除主文件以外的每個依賴項添加假目標,以解決錯誤。如果刪除頭文件而不更新Makefile以匹配,則會給出錯誤。 ([__Source__](https://gcc.gnu.org/onlinedocs/gcc-4.1.2/gcc/Preprocessor-Options.html))你所要做的就是編寫你的makefile來處理這兩個選項。 – Chnossos