2012-05-25 38 views
0

奇怪的事情發生:makefile未檢測到新的保存文件

makefile的想法是能夠同時編譯多個文件。如果您編輯其中一個文件,那麼當您鍵入make時,應編譯的唯一文件就是編輯的文件。

現在,出於某種原因,我的makefile已經決定停止識別文件發生了什麼變化。所以我必須:make cleanmake再次能夠編譯,這是荒謬的,因爲每次我需要編譯大約需要1分鐘。

任何想法爲什麼會發生這種情況?

我沒有添加任何東西到我的生成文件;它只是從無處開始。

+0

改變了一些東西;除非有所改變,否則程序不會停止工作。困難在於改變什麼。你總是可以輸入'rm file-that-c​​hanged.o;使'重建只是一個文件改變,但這是一個討厭。是否有一個多步驟的編譯,你有一箇中間文件,這是令人困惑的'make'?你應該把這個簡化爲一個帶有兩個源文件的簡單makefile,其中一個不會被重新編譯,其中一個可以。告訴我們,以及列出這些文件的目錄。發佈前您可能會解決您的問題。 –

+0

謝謝jonathan!是的,我剛剛在多setp編譯中混淆了一點。猜猜我工作了這麼多小時後有點累了。 – Alessandroempire

回答

2

改變了一些東西;除非有所改變,否則程序不會停止工作。困難在於改變什麼。你總是可以輸入:

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的宏,它包含正確順序的默認後綴。可悲的是,這沒有被採用和標準化,所以你必須自己建立後綴列表。但宏觀名稱的選擇並不完全是偶然的。

+0

謝謝。我不知道後綴列表的順序很重要。 –