Makefile 编译编到一半死机,继续编是否安全?

2018-12-13 15:24:48 +08:00
 bluesky139

make 在用 gcc/g++ 生成 obj 的时候是否会考虑这种情况?

生成的 obj 不完整,但下次因为已经生成了,timestamp 也对,就直接跳过了?

5704 次点击
所在节点    Linux
17 条回复
gaby2018
2018-12-13 15:26:24 +08:00
不安全,老老实实重新来过。
BBge
2018-12-13 15:26:53 +08:00
make clean 以后重新编译吧
bluesky139
2018-12-13 15:30:05 +08:00
@gaby2018
@BBge
这。。
这么广泛使用的工具居然不考虑这种情况。
小工程我倒觉得随便 clean 都无所谓,大工程 clean 一次后要编好久。
rochek
2018-12-13 15:32:25 +08:00
可以继续编,可能会出错
关键是不清脆死机的时候到底发生了什么
gaby2018
2018-12-13 15:33:43 +08:00
@bluesky139 那你按照时间列一下 obj,把死机前几分钟的 obj 干掉。
kiwi95
2018-12-13 15:35:03 +08:00
继续编能链接能 load 就没问题
zst
2018-12-13 15:36:05 +08:00
😂借个楼问下 bazel 编译的断了能继续吗......破电脑重来一次要好久
besto
2018-12-13 15:53:43 +08:00
我想了想, 这个问题应该不是 make 的锅, 而是文件系统的锅. 如果 gcc 产生 obj 已经写到磁盘上, 但是没有做 sync, 这时候死机导致 obj 不完整, make 不应该背这个锅.
bluesky139
2018-12-13 15:58:50 +08:00
@gaby2018 这个方法看起来确实可以。
TommyLemon
2018-12-13 16:03:48 +08:00
先备份数据,最好再拷到其它磁盘或外接存储。
如果还不放心,可以再备份系统。
然后关机重启、清除缓存重试。
bluesky139
2018-12-13 16:03:59 +08:00
@besto 这是一种情况。
假使 gcc 本身正在写,然而没写完就死机了,我想到的是这种,我一般写文件都会用临时文件保证文件的完整性,写完再重命名。
唉,感觉可能的情况好多。
msg7086
2018-12-13 16:31:42 +08:00
这么广泛使用的工具为什么要去考虑死机的问题?
死机以后还可能搞坏你的文件系统呢。

正常电脑运行时是不会随便死机的,特别是 Linux/Unix 这些稳如狗的系统,稳定版连续开机 10 年都不一定会死机。
你电脑要是死机了,不去关心一下是不是哪个硬件出问题了吗?

哦对了,obj 文件是编译器生成的,和 make 没有毛线关系。
wwqgtxx
2018-12-13 16:35:52 +08:00
就像人在胚胎期也没考虑过脐带断了会怎么样😂
atempcode
2018-12-13 16:50:54 +08:00
这情况,真正要去解决的是“生成的 obj 不完整”的问题吧
standin000
2018-12-13 16:58:26 +08:00
@bluesky139 你可以在 Makefile 里写 gcc 编译到临时文件再重命名的规则,make 是个执行规则的软件,Makefile 是程序员自己负责的。
likuku
2018-12-13 18:07:56 +08:00
这么在意“复用”的话,可以了解下 编译(缓存)加速工具,经常用到的通用类库什么的,obj 可以被缓存在硬盘上,大幅度节省时间。

本地的 ccache 和 分布式的 distcc ( 16 节点以内,几乎是随着节点数线性提高编译速度,当然可以和 ccache 搭配使用,要求最好所有节点的 os 版本,编译工具链版本,glibc 版本 都一样,稍微不同也可以)

以前玩 Gentoo 时,为了提高编译全系统提速,用过五六个物理机节点玩 ccache + distcc 的确能快上 3 ~ 4 倍
julyclyde
2018-12-14 12:30:34 +08:00
timestamp 不该正确的啊

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/517245

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX