2014-04-24 2 views
10

Ich habe eine funktionierende Makefile, aber es gibt eine Warnung, die ich nicht beheben konnte.Makefile Warnung: Warnung: Datei `main.cpp 'hat Modifikationszeit 2.1e + 04 s in der Zukunft

#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) 

Fehler:

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. 

Kann mir jemand helfen, um herauszufinden, das Problem? Ich habe versucht, zwischen den Elementen zu wechseln, aber es gibt immer noch die gleiche Warnung.

+4

Dies geschieht, wenn Sie Ausgänge zwischen zwei Computern, und die Uhren auf diesen Computern nicht einverstanden bauen kopieren. 'make clean' sollte die Regenerierung aller Dateien mit der lokalen Uhr erzwingen, und danach sollte das Problem nicht mehr auftreten ... es sei denn, die Computeruhr ist stark kaputt. –

+1

Wie lange dauert die Änderung Ihrer Datei? Dieser Fehler stammt von make (nicht gcc) und sagt Ihnen, dass die Änderungszeit Ihrer Dateien in der Zukunft liegt (was make nicht so viel mag, weil es sie verwirrt). –

+0

make clean wird nichts tun, um die Änderungszeit einer nicht generierten CPP-Datei zu korrigieren. –

Antwort

29

Um auf Ben Voigt Antwort zu erweitern:

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

wird der Zeitstempel für alle Dateien in dem Verzeichnis aktualisieren. Sie können dann wieder make clean && make.

+1

Dies kann jedoch für das vorliegende Problem ein enormer Overkill sein. Dies ist eher die nukleare Option. –

+1

@EtanReisner Überhaupt nicht! Dies ist in der Tat die günstigste Option. Mit dem Berühren und Erstellen von drei Quelldateien werden es vielleicht zwei CPU-Sekunden und zehn menschliche Sekunden sein. –

+0

Ihre Suche ruft "stat" für jede Datei im Verzeichnis auf und führt dann einen Touch für alle aus. Das manuelle Tippen auf eine einzelne Datei ist definitiv schneller. Ihre Lösung wird auch immer schlechter, wenn das Projekt größer wird als die Anzahl der Dateien mit dem falschen Zeitstempel. –

0

Versuchen Sie Folgendes zu verwenden:

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

Bitte erläutern Sie, wie Ihr Code die Frage beantwortet. –