2011-03-28 38 views
1

我嘗試編譯大量使用make程序文件。在運行之間我收到以下錯誤多次<命令行>:錯誤:在生成文件

<command-line>: error: macro names must be identifiers 

由於我使用的-j選項的日誌顯示,從隨機線程輸出。所以遇到這個錯誤的實際文件很難確定。也沒有其他錯誤彈出。有人可以告訴我,這個錯誤試圖表明什麼?

+0

那是什麼導致錯誤的行? :) – sarnold 2011-03-28 06:31:13

+0

實際上工作並行完成,所以從輸出日誌中不可能找出導致這種情況發生的原因。可能是如果我可以知道這個錯誤實際上在makefile的情況下意味着什麼,我可以找出它出現的原因 – Pein 2011-03-28 06:36:32

回答

0

並非所有Makefile s爲準備與-j編譯。有時你只需要在項目完成之前多次運行make -j。你可以隨時起飛-j一旦它拋出一個失敗,並嘗試在任何時間飛行的單一的過程中完成的構建。當試圖調試某些東西時,這可以極大地減少不可預測性,同時仍然使用並行構建作業來編譯某些(或幾乎全部,如果幸運的話)編譯。

我在追查什麼構成make(1)中的標識符時遇到了問題,但在大多數語言中,限制通常沿着這樣的路線:「第一個字符必須是[a-zA-Z],所有其他字符必須是[ A-ZA-Z0-9_]」。我想像make(1)的規則是相似的。

2

這不是make的錯誤消息,而是來自預處理器(由make調用)。 正如其他人所說,運行make而沒有-j選項(無論是從一開始,還是在make -j失敗後)都可以更清楚地瞭解錯誤的來源。

2

這是從C的預處理器。它通常發生在你將一個-D開關傳遞給gcc時,一個無效符號或沒有符號。

的根本原因可能是像

CFLAGS=-g -D$(DEBUG) 

或類似的東西,在DEBUG實際上沒有任何地方定義在你的makefile一條線。