2012-12-06 14 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 

あなたの助けをいただき、ありがとうございます。 NFSマウントおよびNFSサーバーのクロックに置かコンパイルソースがコンパイルをやって先にクライアントのクロックを実行する場合stijnメッセージ「クロック・スキューがを検出した」ことにより、コメントに示すよう

+3

は 'Board.c'の修正時刻をチェックし、創造の時に先にあなたのMACHINのあるときに、別のソースからこれをコピーしたことが表示されます。 1つの解決策は、現在の時刻に変更時刻を設定するために 'touch board.c 'を実行することができます –

+1

はおそらくネットワークの場所に格納されているソースですか? – stijn

+1

可能な複製[リモートLinuxマシンでのC++のコンパイル - "クロックスキューが検出されました"という警告](http://stackoverflow.com/questions/3824500/compiling-c-on-remote-linux-machine-clock-skew-detected-警告) – skrrgwasme

答えて

26

は、最も一般的に与えられています。

+0

これには解決策がありますか?私のソースファイルは、やや先を見せるnfsサーバー上にあります。私のdevマシンとnfsサーバーは別々のドメインのVMであるため、正確な時計は決して得られません。 – TSG

+0

@Telium:定期的に両方のマシンでN(erwork)T(ime)P(rotocol)クライアントを実行したいでしょうか? – alk

3

ここの大学のコンピューターの1つでいくつかの作業を行うときにEclipseでこれを数回見ました。私のデータドライブはネットワークドライブであり、ネットワークドライブとローカルマシン間のクロックの違いはありませんでした。

ゴー:ローカルマシン(Cドライブ)上の場所に私のワークスペースを切り替え

可能な解決策は、タイムスタンプを更新するためにソースツリー内のすべてのファイルがtouchにある

23

問題を修正しましたサブツリーのルート行うには:次に

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