2012-12-06 24 views
9

Il mio problema è ogni volta che provo a compilare utilizzando Makefile ottengo il seguente:Makefile: skew rilevato

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. 

mio 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 

Grazie per il vostro aiuto.

+3

Controllare la data di modifica del 'Board.c', sembra che si può avere copiato questo da un'altra fonte, quando nel momento della creazione è davanti alla vostra Machin. È possibile eseguire una soluzione 'touch Board.c' per impostare l'ora di modifica sull'ora corrente –

+1

le fonti memorizzate in un percorso di rete, forse? – stijn

+1

possibile duplicato di [Compilazione C++ su macchina Linux remota - avviso "skew di clock rilevato"] (http://stackoverflow.com/questions/3824500/compiling-c-on-remote-linux-machine-clock-skew-detected- avviso) – skrrgwasme

risposta

26

Come indicato in un commento di Stijn il messaggio "skew rilevato" è più comunemente dato se le fonti compilazione situati su un mount NFS e l'orologio del server NFS corre avanti l'orologio del client fa la compilazione.

+0

C'è una soluzione a questo? I miei file sorgente si trovano su un server nfs che sembra essere leggermente più avanti. La mia macchina dev e il server nfs sono VM su domini separati, quindi non posso mai ottenere orologi esatti – TSG

+0

@Telium: potresti voler eseguire un client N (erwork) T (ime) P (rotocol) su entrambe le macchine su base regolare? – alk

3

Ho visto questo in Eclipse anche un paio di volte quando si lavora su uno dei computer dell'Università qui. La mia unità dati era un'unità di rete e la differenza di clock tra l'unità di rete e il computer locale era disattivata.

commutazione il mio lavoro per una posizione sulla macchina locale (unità C) ha risolto il problema

23

Una possibile soluzione è quella di touch ogni file nella struttura di origine al fine di aggiornare timestamp:

Go alla radice del sotto-albero di un do:

find . -exec touch {} \; 

Poi make clean e riprovare compilazione.

+0

Funziona sempre. Grazie! – steadweb

+1

In questo modo, compiliamo sempre e sempre tutto un tutto, non solo i file di origine che sono stati toccati a causa delle modifiche al codice. Almeno per una grande base di codice questo probabilmente non è quello che vuoi. – alk

1

Quel messaggio è in genere un'indicazione che alcuni dei tuoi file hanno tempi di modifica successivi all'ora di sistema corrente. Poiché make decide quali file compilare quando si esegue una build incrementale controllando se un file di origine è stato modificato più recentemente del suo file oggetto, questa situazione può causare la creazione di file non necessari o, peggio, la creazione di file necessari.

2

digitare il seguente comando

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

Senza ulteriori spiegazioni questo potrebbe portare l'OP a fare cose indesiderate! Pur puntando nella giusta direzione, questa non è una buona risposta, a causa della mancanza di informazioni secondarie.Vedere la risposta di * sblob * per un modo migliore per spiegare il problema: http://stackoverflow.com/a/19016418/694576 – alk