假设我有一个类似于此的Makefile:
program.revision: smaug
git rev-parse HEAD > program.revision
program: $(obj)
$(CC) -o $@ $^ $(LDFLAGS)
目标很明确:我希望program.revision
始终镜像创建program
的源代码的修订版。
但我写了这篇文章然后意识到它可能不足以满足我的需求和担忧:
如果program
的编译失败了一半,program
的旧(工作)版本是否会被遗忘,还是会被删除?
与第1点相关,如何确保删除program
后,program.revision
也会被删除?同样地,如果旧版本存活,旧的program.revision
保持不变?
如何确保program.revision
始终保持同步,即使我专门执行make program
而不是普通make
?
我意识到通过在构建它们之前删除旧文件可以使这个问题变得相当简单,但是最小化由于构建失败导致program
最终丢失的可能性非常重要。
我如何妥善处理这种情况?
编辑:
写完之后,我突然意识到我的问题可能不是我想的那样。我的目标是让program
的版本知道它的创建版本,所以答案可能不在Makefile
和program.revision
文件中,而是找到一种方法将此信息编译到可执行文件中。嗯..