0
当我编译大型程序(例如gcc或clang)时,我的计算机可能会过热并被迫关闭。从突然结束的产品中恢复
我想从我停止的地方恢复make
过程。这个问题似乎是有一半已完成/写入文件漂浮在周围,导致其余的内置的打破(这是特别糟糕,当我指定-j 8
)
有没有一种简单的方法来解决这个问题问题(没有做make clean
或make distclean
或类似的)?
使用GNU使3.81
当我编译大型程序(例如gcc或clang)时,我的计算机可能会过热并被迫关闭。从突然结束的产品中恢复
我想从我停止的地方恢复make
过程。这个问题似乎是有一半已完成/写入文件漂浮在周围,导致其余的内置的打破(这是特别糟糕,当我指定-j 8
)
有没有一种简单的方法来解决这个问题问题(没有做make clean
或make distclean
或类似的)?
使用GNU使3.81
沿着相同的线路以Beta版的评论,但更为可靠,不混乱IMO,会改变你的编译规则,以便您编译到一个临时文件,然后在最后将其重命名到真正的文件。那么,你可能会碰到这样的:
%.o : %.c
$(CC) $(CFLAGS) $(CPPFLAGS) -o [email protected] -c $<
,而不是你会使用类似:
%.o : %.c
$(CC) $(CFLAGS) $(CPPFLAGS) -o [email protected] -c $< \
&& mv -f [email protected] [email protected]
您可能会或可能不会想添加一个“RM -f $ @”的可能。
至于你是否可以用“编程方式”进行这种改变,它都依赖于你的makefile以及它的结构。如果它是一个格式良好的makefile,那么你可以在几个隐含规则的几个地方进行这些更改,如上所述。
也许不是一个简单的方法,但是...您可以使用标记文件来指示给定的对象文件是否完整。类似'foo_done:foo.cc gcc $ <-o foo.o touch $ @' –
Beta
2013-03-10 21:56:09
@Beta我没有写makefile。我怎么能实现这个通用的生成文件 – soandos 2013-03-10 22:17:19
你的意思是不修改任何makefile?我不认为你可以。只要做一个“干净的”。如果您的计算机的平均故障间隔时间短于您的构建时间,则会出现更大的问题。 – Beta 2013-03-10 23:05:09