make 在用 gcc/g++ 生成 obj 的时候是否会考虑这种情况?
生成的 obj 不完整,但下次因为已经生成了,timestamp 也对,就直接跳过了?
1
gaby2018 2018-12-13 15:26:24 +08:00
不安全,老老实实重新来过。
|
2
BBge 2018-12-13 15:26:53 +08:00 via Android
make clean 以后重新编译吧
|
3
bluesky139 OP |
4
rochek 2018-12-13 15:32:25 +08:00
可以继续编,可能会出错
关键是不清脆死机的时候到底发生了什么 |
5
gaby2018 2018-12-13 15:33:43 +08:00
@bluesky139 那你按照时间列一下 obj,把死机前几分钟的 obj 干掉。
|
6
kiwi95 2018-12-13 15:35:03 +08:00 via Android
继续编能链接能 load 就没问题
|
7
zst 2018-12-13 15:36:05 +08:00 via Android
😂借个楼问下 bazel 编译的断了能继续吗......破电脑重来一次要好久
|
8
besto 2018-12-13 15:53:43 +08:00
我想了想, 这个问题应该不是 make 的锅, 而是文件系统的锅. 如果 gcc 产生 obj 已经写到磁盘上, 但是没有做 sync, 这时候死机导致 obj 不完整, make 不应该背这个锅.
|
9
bluesky139 OP @gaby2018 这个方法看起来确实可以。
|
10
TommyLemon 2018-12-13 16:03:48 +08:00
先备份数据,最好再拷到其它磁盘或外接存储。
如果还不放心,可以再备份系统。 然后关机重启、清除缓存重试。 |
11
bluesky139 OP |
12
msg7086 2018-12-13 16:31:42 +08:00
这么广泛使用的工具为什么要去考虑死机的问题?
死机以后还可能搞坏你的文件系统呢。 正常电脑运行时是不会随便死机的,特别是 Linux/Unix 这些稳如狗的系统,稳定版连续开机 10 年都不一定会死机。 你电脑要是死机了,不去关心一下是不是哪个硬件出问题了吗? 哦对了,obj 文件是编译器生成的,和 make 没有毛线关系。 |
13
wwqgtxx 2018-12-13 16:35:52 +08:00 via iPhone
就像人在胚胎期也没考虑过脐带断了会怎么样😂
|
14
atempcode 2018-12-13 16:50:54 +08:00
这情况,真正要去解决的是“生成的 obj 不完整”的问题吧
|
15
standin000 2018-12-13 16:58:26 +08:00
@bluesky139 你可以在 Makefile 里写 gcc 编译到临时文件再重命名的规则,make 是个执行规则的软件,Makefile 是程序员自己负责的。
|
16
likuku 2018-12-13 18:07:56 +08:00 via iPhone
这么在意“复用”的话,可以了解下 编译(缓存)加速工具,经常用到的通用类库什么的,obj 可以被缓存在硬盘上,大幅度节省时间。
本地的 ccache 和 分布式的 distcc ( 16 节点以内,几乎是随着节点数线性提高编译速度,当然可以和 ccache 搭配使用,要求最好所有节点的 os 版本,编译工具链版本,glibc 版本 都一样,稍微不同也可以) 以前玩 Gentoo 时,为了提高编译全系统提速,用过五六个物理机节点玩 ccache + distcc 的确能快上 3 ~ 4 倍 |
17
julyclyde 2018-12-14 12:30:34 +08:00
timestamp 不该正确的啊
|