奇怪的事情發生:makefile未檢測到新的保存文件
makefile的想法是能夠同時編譯多個文件。如果您編輯其中一個文件,那麼當您鍵入make
時,應編譯的唯一文件就是編輯的文件。
現在,出於某種原因,我的makefile已經決定停止識別文件發生了什麼變化。所以我必須:make clean
和make
再次能夠編譯,這是荒謬的,因爲每次我需要編譯大約需要1分鐘。
任何想法爲什麼會發生這種情況?
我沒有添加任何東西到我的生成文件;它只是從無處開始。
奇怪的事情發生:makefile未檢測到新的保存文件
makefile的想法是能夠同時編譯多個文件。如果您編輯其中一個文件,那麼當您鍵入make
時,應編譯的唯一文件就是編輯的文件。
現在,出於某種原因,我的makefile已經決定停止識別文件發生了什麼變化。所以我必須:make clean
和make
再次能夠編譯,這是荒謬的,因爲每次我需要編譯大約需要1分鐘。
任何想法爲什麼會發生這種情況?
我沒有添加任何東西到我的生成文件;它只是從無處開始。
改變了一些東西;除非有所改變,否則程序不會停止工作。困難在於改變什麼。你總是可以輸入:
rm file-that-changed.o
make
重建只是一個文件改變,但這是一個討厭。
是否有一個多步驟編譯,你有一箇中間文件躺在那是令人困惑的make
?
我剛剛在一個多步驟編譯混合。
如果您有編譯成C代碼,然後由C爲目標代碼(或任何其它類似的多步編譯)非標準文件後綴,那麼關鍵,這是讓可靠重新編譯與make
是組織後綴列表,以便您的擴展在一開始。不幸的是,沒有一個標準的簡單的方法來知道內置的後綴列表是什麼,所以你最終不得不做這樣的事情:
SUFFIXES = .y .l .c .o # Yacc, Lex, C, Object files
EXTRA_SUFFIX = .xc # Extreme C, or Extended C, or ...
.SUFFIXES: # Eliminate all built-in suffixes
.SUFFIXES: ${EXTRA_SUFFIX} ${SUFFIXES}
第二.SUFFIXES
路線讓您的分機上的前列表。現在,你可以寫你的規則來編譯.xc
文件轉換成.c
或.o
文件,然後在修改.xc
文件,即使有一箇中間.c
文件身邊離開了,事實.xc
比.c
或.o
文件新將確保重新編譯完成。
很久以前,太陽版make
提供了一個名爲SUFFIXES的宏,它包含正確順序的默認後綴。可悲的是,這沒有被採用和標準化,所以你必須自己建立後綴列表。但宏觀名稱的選擇並不完全是偶然的。
謝謝。我不知道後綴列表的順序很重要。 –
改變了一些東西;除非有所改變,否則程序不會停止工作。困難在於改變什麼。你總是可以輸入'rm file-that-changed.o;使'重建只是一個文件改變,但這是一個討厭。是否有一個多步驟的編譯,你有一箇中間文件,這是令人困惑的'make'?你應該把這個簡化爲一個帶有兩個源文件的簡單makefile,其中一個不會被重新編譯,其中一個可以。告訴我們,以及列出這些文件的目錄。發佈前您可能會解決您的問題。 –
謝謝jonathan!是的,我剛剛在多setp編譯中混淆了一點。猜猜我工作了這麼多小時後有點累了。 – Alessandroempire