Makefile:检测到时钟偏差

时间:2012-12-06 14:25:15

标签: makefile clock skew

我的问题是每当我尝试使用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 $@

PlayBoard.o: PlayBoard.c Board.o
    $(CC) $(FLAGS) -lm PlayBoard.c -o $@

Board.o : ErrorHandle.o Board.c Board.h
    $(CC) $(FLAGS) -lm Board.c -o $@

.PHONY : clean

clean:
    rm -f Board.o PlayBoard.o PlayBoard

all : PlayBoard

感谢您的帮助。

5 个答案:

答案 0 :(得分:28)

可能的解决方案是touch源树中的每个文件,以便更新时间戳:

转到子树的根目录:

find . -exec touch {} \; 

然后make clean并重试编译。

答案 1 :(得分:26)

stijn 的评论中所述,如果编译位于NFS挂载上的源并且NFS服务器的时钟提前运行,则通常会给出消息“检测到时钟偏差”客户端的时钟在进行编译。

答案 2 :(得分:3)

我在这里的一台大学计算机上做一些工作时,在Eclipse中也看到过这种情况。我的数据驱动器是网络驱动器,网络驱动器和本地计算机之间的时钟差异已关闭。

将我的工作区切换到本地计算机(C盘)上的某个位置修复了问题

答案 3 :(得分:2)

输入以下命令

find -exec touch \{\} \;

答案 4 :(得分:1)

该消息通常表示您的某些文件的修改时间晚于当前系统时间。由于make在执行增量构建时通过检查源文件是否比其目标文件更新来进行修改来决定编译哪些文件,因此这种情况可能导致构建不必要的文件,或者更糟糕的是,不构建必需的文件。