Linux Makefile警告:警告:文件`main.cpp';修改时间为2.1e+;未来的04秒

Linux Makefile警告:警告:文件`main.cpp';修改时间为2.1e+;未来的04秒,linux,makefile,Linux,Makefile,我有一个正在工作的Makefile,但有一个警告我无法修复 #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): mai

我有一个正在工作的
Makefile
,但有一个警告我无法修复

#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)
错误:

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.

有人能帮我解决这个问题吗?我试图在元素之间切换,但它仍然给出了相同的警告。

要扩展Ben Voigt的答案:

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

将更新目录中所有文件的时间戳。然后,您可以再次清洁和制作。

检查您的计算机时间。我也有同样的问题,根本原因是我的计算机时间在过去-当我更新它时,它工作得很好。

该消息通常表示您的某些文件的修改时间晚于当前系统时间

检查您的系统时间是否在过去。例如:

$date

如果是这样,你有几种方法来解决这个问题。更简单的方法是安装ntp服务器:

apt安装ntp

yum安装ntp

或者


关于您的操作系统(Ubuntu、Centos等)

当您在两台计算机之间复制生成输出,并且这些计算机上的时钟不一致时,就会发生这种情况
makeclean
应该使用本地时钟强制重新生成所有文件,之后就不会再看到问题了。。。除非你的电脑时钟坏得很厉害。你的文件的修改时间是多少?这个错误来自make(不是gcc),它告诉您您的文件修改时间是在将来(make不太喜欢它,因为它混淆了它)。make clean将无法修复未生成的.cpp文件的修改时间。哦,它担心的是源文件吗
touch
应该可以解决这个问题,但原因是一样的——在时钟不一致的计算机之间进行复制。它起作用了,因为该文件的修改时间戳现在不再是将来的事了。调整该文件上的修改时间戳也会起作用。不过,对于手头的问题来说,这可能是一种极大的矫枉过正。这是一个核选项。@EtanReisner一点也不!这实际上是最便宜的选择。触摸并制作三个源文件,可能需要两个CPU秒和十个人秒。您的发现是对目录中的每个文件调用
stat
,然后对所有文件运行触摸。手动在单个文件上运行touch肯定比这更快。您的解决方案也只会随着项目相对于具有错误时间戳的文件数量越来越大而变得越来越糟糕。@EtanReisner您是否认为项目已经构建了一半,值得利用这一点,还是说额外进行20次系统调用值得避免?是的。make将统计所有文件,因此使用find do不会造成太大伤害,但如果只有一个文件存在问题,也没有理由让find这么做(然后修改每个文件)。如果你有很多文件触发了这一点,并且不想单独手动执行这些操作,那么这很好(因此我的“核选项”)评论。但是,正如所问的,问题是关于单个文件,运行此命令来修复单个文件的修改时间是非常过分的。