我正在尝试将我的 Subversion 修订号嵌入到 C++ 项目中,并且在设置 GNU make 时遇到问题。我的 makefile 目前看起来像这样:
check-svnversion:
../shared/update-svnversion-h.pl
../shared/svnversion.h: check-svnversion
shared/svnversion.o: ../shared/svnversion.h
.PHONY: check-svnversion
svnversion.o取决于svnversion.cpp(通过模式规则)和svnversion.h(明确列出,因为依赖检查由于某种原因没有捡起它)。 svnversion.h由update-svnversion-h.pl脚本创建和维护(基本上只是运行svnversion并将输出转换为 C++ 文件)。
目前,我必须运行make两次才能使文件保持最新。第一次,make运行update-svnversion-h.pl(因为它被列为先决条件)但不检查svnversion.h之后的时间戳以查看它是否被 更改update-svnversion-h.pl,因此它不会重新制作svnversion.o。第二次,它确实检查了时间戳,update-svnversion-h.pl无论如何都会运行(这次它什么都不做,因为svnversion.h它是最新的),然后重新编译svnversion.cpp为 make svnversion.o。
有没有办法告诉 GNU make 两次评估单个先决条件或延迟检查先决条件的时间戳,直到该先决条件的命令完成后?
或者,有没有更好的方法在我的源代码中嵌入修订号?(为了速度,我试图避免在每次构建时都需要重新编译的解决方案。)