我通过PuTTY和WinSCP连接到我大学的小型Linux集群,使用后者传输文件,并使用前者编译和运行它们.到目前为止,我的工作已在大学的实验室进行,但今天我在家里做了一些工作,产生了一个有趣的警告.
我上传了整个文件夹,在运行make
命令后,我将其作为输出的最后一行:
make:warning:检测到时钟偏斜.您的构建可能不完整.
生成的二进制文件正常工作,并且在构建过程中似乎没有任何其他意外错误.
我似乎能够在上传一些新的/替换文件之后通过构建来触发错误(我在本地编辑所有内容然后上传新版本),所以我想知道它是否像文件修改时间不匹配一样简单?还是更关心的事情?
那么,我应该担心吗?我该如何修复/防止这种情况?
该消息通常表示您的某些文件的修改时间晚于当前系统时间.由于make
在执行增量构建时通过检查源文件是否比其目标文件更新来进行修改来决定编译哪些文件,因此这种情况可能导致构建不必要的文件,或者更糟糕的是,不构建必需的文件.
但是,如果您从头开始构建(不进行增量构建),您可能会忽略此警告而不会产生任何后果.
通常,这会在NFS安装目录中构建时发生,并且客户端和NFS服务器上的时钟不同步.
解决方案是在NFS服务器和所有客户端上运行NTP客户端.
make
在服务器上运行Samba SMB CIFS共享时,这也发生在我身上.持久的解决方案包括在ntp
服务器和客户端上安装守护程序.(请注意,这个问题并没有通过运行ntpdate
来解决.这只会暂时解决时间差异,但将来不会解决.)
对于Ubuntu和Debian派生的系统,只需在命令行键入以下行:
$ sudo apt-get install ntp
此外,仍然需要touch *
在受影响的目录中发出一次(并且仅一次)命令以一劳永逸地更正文件修改时间.
$ touch *
有关ntp
和之间差异的更多信息ntpdate
,请参阅:
与NTP进行时间同步
如何在Ubuntu 16.04上设置时间同步
简单方案:
# touch filename
会做的都行.
欲了解更多信息:http: //embeddedbuzz.blogspot.in/2012/03/make-warning-clock-skew-detected-your.html
根据LinuxQuestions.org上的用户m9dhatter:
"make"使用文件的时间戳来确定它尝试编译的文件是旧的还是新的.如果你的时钟被刻录,它可能会有问题编译.
如果你尝试在时钟前几分钟修改另一台机器上的文件并将它们传输到你的机器然后尝试编译它可能会发出一个警告,说明该文件是从未来修改过来的.时钟可能会扭曲或有什么影响(不能忘记).你可能只是对违规文件这样做:
#touch <违规文件的文件名>
这里的其他答案很好地解释了这个问题,所以我在此不再重复.但是有一种解决方案可以解决它尚未列出的问题:只需运行make clean
,然后重新运行make
.
删除任何已经编译的文件将阻止make有任何文件来比较解决警告的时间戳.