2014-04-24 10 views
10

Ho un Makefile funzionante, ma c'è un avviso che non è stato possibile correggere.Avviso makefile: Avviso: File `main.cpp 'ha ora di modifica 2.1e + 04 s in futuro

#Use the g++ compiler 
CC = g++ 

# Compiler flags: 
# -Wall (most warnings enabled) 
# -g (for debugging with gdb) 
CFLAGS = -Wall 

# Executable name: 
TARGET = deque_adt 

all: main.o deque_adt.o deque_adt 

$(TARGET): main.o deque_adt.o 
    $(CC) $(CFLAGS) main.o deque_adt.o -o $(TARGET) 

main.o: main.cpp deque_adt.h 
    $(CC) $(CFLAGS) main.cpp -c 

deque_adt.o: deque_adt.cpp deque_adt.h 
    $(CC) $(CFLAGS) deque_adt.cpp -c 

clean: 
    rm *.o *~ $(TARGET) 

errore:

make: Warning: File `main.cpp' has modification time 2.1e+04 s in the future 
g++ -Wall main.cpp -c 
g++ -Wall deque_adt.cpp -c 
g++ -Wall main.o deque_adt.o -o deque_adt 
make: warning: Clock skew detected. Your build may be incomplete. 

Qualcuno può aiutarmi a capire il problema? Ho provato a passare tra gli elementi, ma dà ancora lo stesso avviso.

+4

Questo accade quando si copia costruire uscite tra due computer, e gli orologi su tali computer non sono d'accordo. 'make clean' dovrebbe forzare la rigenerazione di tutti i file usando l'orologio locale, dopodiché non dovresti vedere di nuovo il problema ... a meno che l'orologio del tuo computer non sia rotto. –

+1

Qual è l'ora di modifica sul tuo file? Questo errore proviene da make (non gcc) e ti sta dicendo che il tempo di modifica dei tuoi file è in futuro (il che rende non piace molto perché lo confonde). –

+0

make clean non farà nulla per correggere il tempo di modifica di un file .cpp non generato. –

risposta

29

Per espandere sulla risposta di Ben Voigt:

find /your/dir -type f -exec touch {} + 

aggiornerà il timestamp su tutti i file nella directory. È quindi possibile make clean && make di nuovo.

+1

Tuttavia, questo potrebbe essere un enorme esagerazione per il problema. Questa è piuttosto l'opzione nucleare. –

+1

@EtanReisner Niente affatto! Questa è in effetti l'opzione più economica. Con il tocco e la creazione di tre file sorgente, sarà pari a forse due secondi CPU e dieci secondi umani. –

+0

Il tuo find sta chiamando 'stat' su ogni file nella directory e poi li sta toccando tutti. L'esecuzione manuale di un singolo file è decisamente più veloce. Inoltre, la tua soluzione peggiora ulteriormente quando il progetto diventa più grande rispetto al numero di file con timestamp errato. –

0

tenta di utilizzare il seguente:

rm Makefile 
sudo qmake yourproj. //or any command to create the makefile again 
make clean 
make 
+1

Spiega come il tuo codice risponde alla domanda. –