2012-12-06 48 views
9

我的問題是,每當我嘗試使用Makefile中,我得到編譯如下:的Makefile:時鐘偏斜檢測

make: Warning: File `Board.c' has modification time 1.3e+03 s in the future 
gcc -Wall -c -Wvla -lm Board.c -o Board.o 
gcc -Wall -c -Wvla -lm PlayBoard.c -o PlayBoard.o 
gcc -lm ErrorHandle.o Board.o PlayBoard.o -g -o PlayBoard 
make: warning: Clock skew detected. Your build may be incomplete. 

我的Makefile:

CC = gcc 
FLAGS = -Wall -c -Wvla 

PlayBoard: ErrorHandle.o Board.o PlayBoard.o 
    $(CC) -lm ErrorHandle.o Board.o PlayBoard.o -g -o [email protected] 

PlayBoard.o: PlayBoard.c Board.o 
    $(CC) $(FLAGS) -lm PlayBoard.c -o [email protected] 

Board.o : ErrorHandle.o Board.c Board.h 
    $(CC) $(FLAGS) -lm Board.c -o [email protected] 

.PHONY : clean 

clean: 
    rm -f Board.o PlayBoard.o PlayBoard 

all : PlayBoard 

謝謝您的幫助。

+3

檢查'Board.c'的修改時間,看來,你可以從另一來源,當在創建的時候是領先你MACHIN都複製這一點。一個解決方案可以運行'觸摸Board.c'將修改時間設置爲當前時間 –

+1

是否可能存儲在網絡位置的源? – stijn

+1

[在遠程Linux機器上編譯C++ - 「檢測到時鐘歪斜」警告]可能的重複(http://stackoverflow.com/questions/3824500/compiling-c-on-remote-linux-machine-clock-skew-detected-警告) – skrrgwasme

回答

26

正如斯泰恩消息「時鐘偏差檢測」的評論表示是,如果位於一個NFS掛載和NFS服務器的時鐘編譯源代碼運行領先於客戶端的時鐘做編輯最常用給出。

+0

有沒有解決方案?我的源文件位於nfs服務器上,似乎略微超前。我的開發機器和nfs服務器是虛擬機在單獨的域中,所以我可能永遠不會得到時鐘確切 – TSG

+0

@Telium:您可能想要在兩臺計算機上運行N(erwork)T(ime)P(rotocol)客戶端? – alk

3

我在Eclipse中看到過這樣的情況,當時在這裏的一臺大學計算機上做了一些工作。我的數據驅動器是網絡驅動器,網絡驅動器和本地計算機之間的時鐘差異已關閉。

交換我的工作區的位置在本地機器(C盤)上固定

23

一個可能的解決方案是touch在源代碼樹中的每個文件以更新時間戳的問題:

圍棋於子樹的根的DO:

find . -exec touch {} \; 

然後make clean並重新編譯。

+0

每次都有作品。謝謝! – steadweb

+1

這樣做讓我們隨時隨地編譯所有的一切,而不僅僅是由於代碼更改而被觸及的源文件。至少對於大型代碼庫來說,這可能不是你想要的。 – alk

1

該消息通常表示某些文件的修改時間晚於當前系統時間。由於make在執行增量構建時通過檢查源文件是否比其目標文件更新近被修改來決定編譯哪些文件,因此這種情況會導致構建不必要的文件,或者更糟糕的是,不會構建必要的文件。

2

鍵入以下命令

find -exec touch \{\} \; 
+2

沒有進一步的解釋,這可能會導致OP有不必要的事情!雖然指向正確的方向,但這並不是一個好的答案,因爲缺少邊信息。請參閱* sblob *的答案以更好地解釋問題:http://stackoverflow.com/a/19016418/694576 – alk