2013-03-10 57 views
0

当我编译大型程序(例如gcc或clang)时,我的计算机可能会过热并被迫关闭。从突然结束的产品中恢复

我想从我停止的地方恢复make过程。这个问题似乎是有一半已完成/写入文件漂浮在周围,导致其余的内置的打破(这是特别糟糕,当我指定-j 8

有没有一种简单的方法来解决这个问题问题(没有做make cleanmake distclean或类似的)?

使用GNU使3.81

+0

也许不是一个简单的方法,但是...您可以使用标记文件来指示给定的对象文件是否完整。类似'foo_done:foo.cc gcc $ <-o foo.o touch $ @' – Beta 2013-03-10 21:56:09

+0

@Beta我没有写makefile。我怎么能实现这个通用的生成文件 – soandos 2013-03-10 22:17:19

+0

你的意思是不修改任何makefile?我不认为你可以。只要做一个“干净的”。如果您的计算机的平均故障间隔时间短于您的构建时间,则会出现更大的问题。 – Beta 2013-03-10 23:05:09

回答

1

沿着相同的线路以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,那么你可以在几个隐含规则的几个地方进行这些更改,如上所述。