Watch at Ease看見世界,讀懂生活。

科技 · 實用指南

make 顯示「No rule to make target」?重建前先追查缺失節點

錯誤指出依賴圖中找不到或無法產生的節點,不是通用修復指令。先固定載入的 Makefile、展開名稱、檔案身分與規則搜尋邊界。

原創示意圖:含一個缺失前置與斷邊的建置目標圖。
原創示意圖:原創插圖:先辨識缺失圖節點。 Watch at Ease

這個訊息指出 make 無法找到或產生的第一個依賴圖節點。保留精確拼字,證明哪些 Makefile 與變數產生它,再修一條斷邊,不要刪除整個建置樹。

失敗可能是請求目標不存在、前置檔缺失、展開路徑錯誤,或沒有任何明示/隱含規則能產生該節點。

1. 固定第一個圖形失敗

保存第一個完整診斷,包括遞迴 make 層級與精確引號名稱。記錄 pwd -P、命令列、make --version、MAKEFLAGS 與賦值。不要先 make clean;生成依賴檔與失敗順序都是證據。

先分類:沒有「needed by」時,缺的可能是命令列目標;有時就先畫出父節點到缺失節點的一條邊,只追這個分支。

2. 證明載入的 Makefile 與名稱

使用實作的唯讀資料庫或除錯輸出,例如 GNU make -pn,保存實際讀取的 Makefile。遞迴建置也要記錄每個進入目錄,因為子 make 可能使用不同樹與變數。

在資料庫與來源 Makefile 搜尋精確缺失字串與父節點。檢查命令列/環境覆寫、include、VPATH、生成片段與設定輸出;名稱空白或含異常空白時檢視原始位元組。

3. 檢查實際檔案物件

從失敗程序目錄對展開後精確路徑執行 stat、readlink 與區分大小寫的清單。斷鏈、重新命名、大小寫變動、未初始化子模組或過期絕對程式庫路徑都可能呈現相同錯誤。

若節點應由工具產生,找出產生器、功能閘門與宣告輸出的規則。不要建立空白佔位檔,否則可能讓建置帶著無效內容繼續並掩蓋未執行的產生器。

4. 證明規則搜尋邊界

判斷節點應已存在或應可生成。既有來源缺失就修路徑或還原審核檔;生成節點則證明明示規則、具有 stem 的有效模式或可用推論規則及其前置。

把字面百分比、空變數、停用的共享程式庫選項與生成 Makefile 分支處理。若建置樹由其他工具生成,修來源設定後重生,不手改可拋棄檔案。

5. 只修一條邊並重播驗收

採取最小且有證據的修正:更正一個名稱、還原一個來源、啟用預期產生器、更新一個宣告依賴或從審核設定重生。先保留舊中繼資料。

從相同目錄與環境重跑原呼叫。節點由預期規則找到或生成、父節點前進且第二次無操作/增量執行穩定才通過。保存前後資料庫片段、檔案身分與成品檢查。

原創示意圖:從工作目錄到規則選擇的五項證據檢查。
原創示意圖:原創插圖:重建前先證明依賴圖。 Watch at Ease