我正在尝试将我的 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 两次评估单个先决条件或延迟检查先决条件的时间戳,直到该先决条件的命令完成后?
或者,有没有更好的方法在我的源代码中嵌入修订号?(为了速度,我试图避免在每次构建时都需要重新编译的解决方案。)