make[1]: warning: Clock skew detected. Your build may be incomplete.
其实之前就曾经发现过这个问题,当时没有仔细研究……
今天又一次见到这个问题:
我需要重新编译一个模块,里面有的代码需要替换,我就从邮件里面用别人发给我的代码替换掉了服务器上的代码,然后make,就会报上面的错。
原因:
首先,我从邮件另存为到桌面,这个时候是重新write了一个新文件,也就是说最后修改时间是当前操作时间;
我的Win系统和服务器时间有差别,而且是Win比较超前,也就是在服务器看来,Win已经在“未来”了;
我将Win下的文件替换掉服务器上的文件,然后make,make发现这个文件居然是来自未来的….
恩,大概就是这么个意思。
看下中英文两种报错吧($LANG):
[test1280@localhost smpinit]$ rz -E
rz waiting to receive.
[test1280@localhost smpinit]$ make
make[1]: Entering directory `/home/test1280/cmin02sms/src/smpinit'
make[1]: Warning: File `smpinit.C' has modification time 44 s in the future
Compiling smpinit.C... OK
……
--->>>>>>>>> MAKE OK <<<<<<<<<---
make[1]: warning: Clock skew detected. Your build may be incomplete.
make[1]: Leaving directory `/home/test1280/cmin02sms/src/smpinit'
关键:
make[1]: Warning: File `smpinit.C' has modification time 47 s in the future
make[1]: warning: Clock skew detected. Your build may be incomplete.
[test1280@localhost smpinit]$ rz -E
rz waiting to receive.
[test1280@localhost smpinit]$ make
make[1]: Entering directory `/home/test1280/cmin02sms/src/smpinit'
make[1]: Warning: File `smpinit.C' has modification time 47 s in the future
Compiling smpinit.C... OK
……
--->>>>>>>>> MAKE OK <<<<<<<<<---
make[1]: 警告:检测到时钟错误。您的创建可能是不完整的。
make[1]: Leaving directory `/home/test1280/cmin02sms/src/smpinit'
关键:
make[1]: Warning: File `smpinit.C' has modification time 47 s in the future
make[1]: 警告:检测到时钟错误。您的创建可能是不完整的。
假设:
1.服务器现在的时间戳是10;
2.Win的时间戳是100;
3.我在Win上创建了一个文件,那modify的时间必然是100(当然,实际是大于100,不考虑这个);
4.将时间戳是100的文件拿到服务器上,然后make,make发现,咦,有个来自未来的文件,这个文件的modify-time是未来的某个时间戳(100),于是给一个警告;
下面是重现一次的过程:
[test1280@localhost smpinit]$ rz -E
rz waiting to receive.
[test1280@localhost smpinit]$ stat smpinit.C
File: “smpinit.C”
Size: 21144 Blocks: 48 IO Block: 4096 一般文件
Device: fd00h/64768d Inode: 6006035 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 514/test1280) Gid: ( 514/test1280)
Access: 2017-06-21 13:37:11.000000000 +0800
Modify: 2017-06-21 13:38:04.000000000 +0800
Change: 2017-06-21 13:37:11.000000000 +0800
[test1280@localhost smpinit]$ date
2017年 06月 21日 星期三 13:37:20 CST
[test1280@localhost smpinit]$ make
make[1]: Entering directory `/home/test1280/cmin02sms/src/smpinit'
make[1]: Warning: File `smpinit.C' has modification time 41 s in the future
Compiling smpinit.C... OK
……
--->>>>>>>>> MAKE OK <<<<<<<<<---
make[1]: 警告:检测到时钟错误。您的创建可能是不完整的。
make[1]: Leaving directory `/home/test1280/cmin02sms/src/smpinit'
看到了吧?stat显示文件的modify-time是38分04秒,但是现在时间是37分20秒….
其实这个警告并不会影响什么,该生成可执行文件还是可执行文件(至少我看到的是这样)。
如果不顺眼,可以touch一下嘛:
[test1280@localhost smpinit]$ stat smpinit.C
File: “smpinit.C”
Size: 21144 Blocks: 48 IO Block: 4096 一般文件
Device: fd00h/64768d Inode: 6006035 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 514/test1280) Gid: ( 514/test1280)
Access: 2017-06-21 13:39:57.000000000 +0800
Modify: 2017-06-21 13:40:45.000000000 +0800
Change: 2017-06-21 13:39:57.000000000 +0800
[test1280@localhost smpinit]$ date
2017年 06月 21日 星期三 13:40:05 CST
[test1280@localhost smpinit]$ touch smpinit.C
[test1280@localhost smpinit]$ stat smpinit.C
File: “smpinit.C”
Size: 21144 Blocks: 48 IO Block: 4096 一般文件
Device: fd00h/64768d Inode: 6006035 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 514/test1280) Gid: ( 514/test1280)
Access: 2017-06-21 13:40:10.000000000 +0800
Modify: 2017-06-21 13:40:10.000000000 +0800
Change: 2017-06-21 13:40:10.000000000 +0800
[test1280@localhost smpinit]$ make
make[1]: Entering directory `/home/test1280/cmin02sms/src/smpinit'
Compiling smpinit.C... OK
……
--->>>>>>>>> MAKE OK <<<<<<<<<---
make[1]: Leaving directory `/home/test1280/cmin02sms/src/smpinit'
另:
find ./ -type f |xargs touch