日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

make的常见错误信息

發布時間:2025/4/16 编程问答 70 豆豆
生活随笔 收集整理的這篇文章主要介紹了 make的常见错误信息 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

本文對make執行時可能出現常見錯誤進行匯總、分析,并給出修正的可能方法。

make執行過程中所產生錯誤并不都是致命的;特別是在命令行之前存在“-”、或者make使用“-k”選項執行時。make執行過程的致命錯誤都帶有前綴字符串“***”。

錯誤信息都有前綴,一種是執行程序名作為錯誤前綴(通常是“make”);另外一種是當Makefile本身存在語法錯誤無法被make解析并執行時,前綴包含了makefile文件名和出現錯誤的行號。

在下述的錯誤列表中,省略了普通前綴:

[FOO] Error NN

[FOO] signal description

這類錯誤并不是make的真正錯誤。它表示make檢測到make所調用的作為執行命令的程序返回一個非零狀態(Error NN),或者此命令程序以非正常方式退出(攜帶某種信號)

如果錯誤信息中沒有附加“***”字符串,則是子過程的調用失敗,如果Makefile中此命令有前綴“-”,make會忽略這個錯誤。

missing separator. Stop.

missing separator (did you mean TAB instead of 8 spaces?). Stop.

不可識別的命令行,make在讀取Makefile過程中不能解析其中包含的內容。GNU make在讀取Makefile時根據各種分隔符(:, =, [TAB]字符等)來識別Makefile的每一行內容。這些錯誤意味著make不能發現一個合法的分隔符。

出現這些錯誤信息的可能的原因是(或許是編輯器,絕大部分是ms-windows的編輯器)在Makefile中的命令之前使用了4個(或者8個)空格代替了[Tab]字符。這種情況,將產生上述的第二種形式產生錯誤信息。且記,所有的命令行都應該是以[Tab]字符開始的。

commands commence before first target. Stop.

missing rule before commands. Stop.

Makefile可能是以命令行開始:以[Tab]字符開始,但不是一個合法的命令行(例如,一個變量的賦值)。命令行必須和規則一一對應。

產生第二種的錯誤的原因可能是一行的第一個非空字符為分號,make會認為此處遺漏了規則的“target: prerequisite”部分。

No rule to make target `XXX'.

No rule to make target ` XXX ', needed by `yyy'.

無法為重建目標“XXX”找到合適的規則,包括明確規則和隱含規則。

修正這個錯誤的方法是:在Makefile中添加一個重建目標的規則。其它可能導致這些錯誤的原因是Makefile中文件名拼寫錯誤,或者破壞了源文件樹(一個文件不能被重建,可能是由于依賴文件的問題)。

No targets specified and no makefile found. Stop.

No targets. Stop.

第一個錯誤表示在命令行中沒有指定需要重建的目標,并且make不能讀入任何makefile文件。第二個錯誤表示能夠找到makefile文件,但沒有終極目標或者沒有在命令行中指出需要重建的目標。這種情況下,make什么也不做。

Makefile `XXX' was not found.

Included makefile `XXX' was not found.

沒有使用“-f”指定makefile文件,make不能在當前目錄下找到默認Makefilemakefile或者GNUmakefile)。使用“-f”指定文件,但不能讀取這個指定的makefile文件。

warning: overriding commands for target `XXX'

warning: ignoring old commands for target `XXX'

對同一目標“XXX”存在一個以上的重建命令。GNU make規定:當同一個文件作為多個規則的目標時,只能有一個規則定義重建它的命令(雙冒號規則除外)。如果為一個目標多次指定了相同或者不同的命令,就會產生第一個告警;第二個告警信息說新指定的命令覆蓋了上一次指定的命令。

Circular XXX <- YYY dependency dropped.

規則的依賴關系產生了循環:目標“XXX”的依賴文件為“YYY”,而依賴“YYY”的依賴列表中又包含“XXX”。

Recursive variable `XXX' references itself (eventually). Stop.

make的變量“XXX”(遞歸展開式)在替換展開時,引用它自身。無論對于直接展開式變量(通過:=定義的)或追加定義(+=),這都是不允許的。

Unterminated variable reference. Stop.

變量或者函數引用語法不正確,沒有使用完整的的括號(缺少左括號或者右括號)。

insufficient arguments to function `XXX'. Stop.

函數“XXX”引用時參數數目不正確。函數缺少參數。

missing target pattern. Stop.

multiple target patterns. Stop.

target pattern contains no `%'. Stop.

mixed implicit and static pattern rules.? Stop.

不正確的靜態模式規則。

第一條錯誤的原因是:靜態模式規則的目標段中沒有模式目標;

第二條錯誤的原因是:靜態模式規則的目標段中存在多個模式目標;

第三條錯誤的原因是:靜態模式規則的目標段目標模式中沒有包含模式字符“%”;

第四條錯誤的原因是:靜態模式規則的三部分都包含了模式字符“%”。正確的應該是只有后兩個才可以包含模式字符“%”。

warning: -jN forced in submake: disabling jobserver mode.

這一條告警和下條告警信息發生在:make檢測到遞歸的make調用時,可通信的子make進程出現并行處理的錯誤。遞歸執行的make的命令行參數中存在“-jN”參數(N的值大于1),在有些情況下可能導致此錯誤,例如:Makefile中變量“MAKE”被賦值為“make –j2”,并且遞歸調用的命令行中使用變量“MAKE”。在這種情況下,被調用make進程不能和其它make進程進行通信,其只能簡單的獨立的并行處理兩個任務”。

warning: jobserver unavailable: using -j1. Add `+' to parent make rule.

為了現實make進程之間的通信,上層make進程將傳遞信息給子make進程。在傳遞信息過程中可能存在這種情況,子make進程不是一個實際的make進程,而上層make卻不能確定子進程是否是真實的make進程。它只是將所有信息傳遞下去。上層make采用正常的算法來決定這些。當出現這種情況,子進程只會接受父進程傳遞的部分有用的信息。子進程會產生該警告信息,之后按照其內建的順序方式進行處理。

轉載于:https://www.cnblogs.com/elect-fans/archive/2011/12/06/2408735.html

《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀

總結

以上是生活随笔為你收集整理的make的常见错误信息的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。