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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

浅显易懂 Makefile 入门 (12)— Makefile 常见的错误信息

發布時間:2023/11/28 生活经验 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 浅显易懂 Makefile 入门 (12)— Makefile 常见的错误信息 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1. 常見的錯誤信息

make 執行過程中所產生錯誤并不都是致命的,特別是在命令行之前存在 -、或者 make 使用 -k 選項執行時。
make 執行過程的致命錯誤都帶有前綴字符串 ***。錯誤信息都有前綴,一種是執行程序名作為錯誤前綴(通常是 make);另外一種是當 Makefile 本身存在語法錯誤無法被 make 解析并執行時,前綴包含了 Makefile 文件名和出現錯誤的行號。

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

[FOO] Error NN
[FOO] signal description

這類錯誤并不是 make 的真正錯誤。它表示 make 檢測到 make 所調用的作為執行命令的程序返回一個非零狀態(Error NN),或者此命令程序以非正常方式退出(攜帶某種信號)。
如果錯誤信息中沒有附加 *** 字符串,則是子過程的調用失敗,如果 Makefile 中此命令有前綴 -make 會忽略這個錯誤。

  1. missing separator.
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] 字符開始的。

  1. commands commence before first target
commands commence before first target. Stop.

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

  1. missing rule
missing rule before commands. Stop.

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

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

無法為重建目標“XXX”找到合適的規則,包括明確規則和隱含規則。
修正這個錯誤的方法是:在 Makefile 中添加一個重建目標的規則。其它可能導致這些錯誤的原因是 Makefile 中文件名拼寫錯誤,或者破壞了源文件樹(一個文件不能被重建,可能是由于依賴文件的問題)。

  1. No targets
No targets specified and no makefile found. Stop.
No targets. Stop.

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

  1. Makefile not found.
Makefile 'XXX' was not found.
Included makefile 'XXX' was not found.

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

  1. overriding commands for target
warning: overriding commands for target 'XXX'

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

  1. gnoring old commands for target
warning: ignoring old commands for target 'XXX'

告警信息說新指定的命令覆蓋了上一次指定的命令。

  1. dependency dropped
Circular XXX <- YYY dependency dropped.

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

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

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

  1. Unterminated variable reference
Unterminated variable reference. Stop.

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

  1. insufficient arguments to function
insufficient arguments to function 'XXX'. Stop.

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

  1. pattern 相關錯誤
missing target pattern. Stop.
multiple target patterns. Stop.
target pattern contains no '%'. Stop.             
mixed implicit and static pattern rules. Stop.

不正確的靜態模式規則。
第一條錯誤的原因是:靜態模式規則的目標段中沒有模式目標;
第二條錯誤的原因是:靜態模式規則的目標段中存在多個模式目標;
第三條錯誤的原因是:靜態模式規則的目標段目標模式中沒有包含模式字符“%”;
第四條錯誤的原因是:靜態模式規則的三部分都包含了模式字符“%”。正確的應該是只有后兩個才可以包含模式字符“%”。

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

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

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

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

總結

以上是生活随笔為你收集整理的浅显易懂 Makefile 入门 (12)— Makefile 常见的错误信息的全部內容,希望文章能夠幫你解決所遇到的問題。

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