科技 · 實用指南
make 顯示「No rule to make target」?重建前先追查缺失節點
錯誤指出依賴圖中找不到或無法產生的節點,不是通用修復指令。先固定載入的 Makefile、展開名稱、檔案身分與規則搜尋邊界。

這個訊息指出 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. 只修一條邊並重播驗收
採取最小且有證據的修正:更正一個名稱、還原一個來源、啟用預期產生器、更新一個宣告依賴或從審核設定重生。先保留舊中繼資料。
從相同目錄與環境重跑原呼叫。節點由預期規則找到或生成、父節點前進且第二次無操作/增量執行穩定才通過。保存前後資料庫片段、檔案身分與成品檢查。
