我使用 PuTTY 从家里连接到大学 Linux 服务器。 我使用 WinSCP 将整个源代码从 Windows 家用计算机上传到 Linux。 然后通过 PuTTY 运行
make
会生成下面一个有趣的警告。
make: warning: Clock skew detected. Your build may be incomplete.
生成的二进制文件工作正常,并且在构建过程中似乎没有任何其他意外错误。
我似乎能够通过在上传一些新/替换文件后构建来触发错误(我在本地编辑所有内容然后上传新版本),所以我想知道这是否与文件修改时间不匹配一样简单?或者还有什么更关心的?
那么,我应该担心吗?我该如何解决/防止这个问题?
该消息通常表明您的某些文件的修改时间晚于当前系统时间。由于
make
在执行增量构建时通过检查源文件是否比其目标文件修改得更晚来决定编译哪些文件,因此这种情况可能会导致构建不必要的文件,或者更糟糕的是,无法构建必要的文件已建成。
但是,如果您从头开始构建(而不是进行增量构建),您可能会忽略此警告而不会产生任何后果。
解决方案是在 NFS 服务器和所有客户端上运行 NTP 客户端。
make
时,这也发生在我身上。 持久的解决方案包括在服务器和客户端上安装
ntp
守护进程。
(请注意,这个问题不能通过运行ntpdate
来解决。这只能暂时解决时差问题,但不会在将来解决。)对于 Ubuntu 和 Debian 衍生系统,只需在命令行中键入以下行:
$ sudo apt install ntp
此外,仍然需要在受影响的目录中发出命令
touch *
一次(且仅一次),以一劳永逸地更正文件修改时间。
$ touch *
更多关于
ntp
和
ntpdate
的区别请参考:
find . -type f | xargs -n 5 touch
make clean
clean
make clean
,然后重新运行
make
。让 make 删除任何已编译的文件将阻止 make 比较任何文件的时间戳,从而解决警告。
#ntpdate 172.16.12.100
172.16.12.100 是 ntp 服务器
sudo date -s "$(wget -qSO- --max-redirect=0 google.com 2>&1 | grep Date: | cut -d' ' -f5-8)Z"
make -j 4
并且一些工作没有按顺序完成。使用
-j
选项时应该会出现此警告。