2012-12-06 16 views
9

我的问题是,每当我尝试使用Makefile中,我得到编译如下:的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 [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 

谢谢您的帮助。

+3

检查'Board.c'的修改时间,看来,你可以从另一来源,当在创建的时候是领先你MACHIN都复制这一点。一个解决方案可以运行'触摸Board.c'将修改时间设置为当前时间 –

+1

是否可能存储在网络位置的源? – stijn

+1

[在远程Linux机器上编译C++ - “检测到时钟歪斜”警告]可能的重复(http://stackoverflow.com/questions/3824500/compiling-c-on-remote-linux-machine-clock-skew-detected-警告) – skrrgwasme

回答

26

正如斯泰恩消息“时钟偏差检测”的评论表示是,如果位于一个NFS挂载和NFS服务器的时钟编译源代码运行领先于客户端的时钟做编辑最常用给出。

+0

有没有解决方案?我的源文件位于nfs服务器上,似乎略微超前。我的开发机器和nfs服务器是虚拟机在单独的域中,所以我可能永远不会得到时钟确切 – TSG

+0

@Telium:您可能想要在两台计算机上运行N(erwork)T(ime)P(rotocol)客户端? – alk

3

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

交换我的工作区的位置在本地机器(C盘)上固定

23

一个可能的解决方案是touch在源代码树中的每个文件以更新时间戳的问题:

围棋于子树的根的DO:

find . -exec touch {} \; 

然后make clean并重新编译。

+0

每次都有作品。谢谢! – steadweb

+1

这样做让我们随时随地编译所有的一切,而不仅仅是由于代码更改而被触及的源文件。至少对于大型代码库来说,这可能不是你想要的。 – alk

1

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

2

键入以下命令

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

没有进一步的解释,这可能会导致OP有不必要的事情!虽然指向正确的方向,但这并不是一个好的答案,因为缺少边信息。请参阅* sblob *的答案以更好地解释问题:http://stackoverflow.com/a/19016418/694576 – alk