我使用gmake和gcc -MM
跟蹤標頭依賴關係,跟在the manual之後。該機制依賴於makefile include
指令來導入計算的依賴關係。GNU make:乾淨目標取決於包括
由於生成文件包含.d
文件,因此它們必須存在才能生成任何目標,包括clean
。所以clean
之前可以做正確的事情,必須生成依賴關係,如果一個失敗,然後clean
只是做得更亂。
除了clean
,它希望在構建任何目標之前創建所有的依賴關係。此外,如果任何文件被更改爲包含不存在的文件,則依賴關係解析會中斷,並且根本不會生成任何文件。
如果刪除標題,那麼現有的依賴項文件仍然將其命名爲目標文件,在除去違規的依賴文件之前不會生成任何內容......這不能通過clean
完成。
用通配符替換include
的替換模式以包含所有先前存在的依賴文件可解決一些問題,但它仍無法清除已損壞的依賴項,並且永不刪除過時的依賴項文件。有更好的解決方案嗎?手冊的示例是否真正用於實際使用?
@Patatoswatter,no。在這種情況下,.d文件的生成與實際編譯相結合,GCC在單個調用中執行這些步驟。 –
對不起,在閱讀更多內容之前我不應該說話。看起來像'-MP'解決了什麼問題後解決了剩餘的問題。但我更喜歡將對象從源保存在另一個目錄中,並且可能需要對依賴文件進行更多處理以支持預編譯頭。 – Potatoswatter
@Patatoswatter,我從來沒有使用過PCH,但是爲對象和源分割目錄不是一個大問題。只需將路徑前綴爲目標和前提條件:'$(OBJ_DIR)/%。o:$(SRC_DIR)/%。c'。依賴文件將放置在'$(OBJ_DIR)'中的目標文件附近。 –