gpt4 book ai didi

svn - 延迟或重复 GNU make 中的先决条件

转载 作者:行者123 更新时间:2023-12-01 13:35:13 25 4
gpt4 key购买 nike

我正在尝试将 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.hupdate-svnversion-h.pl 脚本创建和维护(该脚本基本上只是运行 svnversion 并将输出合并到C++ 文件)。

目前,我必须运行 make 两次才能使文件更新。第一次,make 运行 update-svnversion-h.pl(因为它被列为先决条件),但不检查 svnversion.h 的时间戳code> 之后查看它被 update-svnversion-h.pl 更改,因此它不会重新制作 svnversion.o。第二次,它确实检查时间戳,无论如何都会运行 update-svnversion-h.pl (这次不会执行任何操作,因为 svnversion.h 已达到date),然后重新编译 svnversion.cpp 生成 svnversion.o

有没有办法告诉 GNU make 对单个先决条件求值两次,或者延迟检查先决条件的时间戳,直到该先决条件的命令完成之后?

或者,是否有更好的方法在我的源代码中嵌入修订号? (为了速度,我试图避免需要在每个构建上重新编译的解决方案。)

最佳答案

这看起来类似于 autotools对其 config.h header 执行此操作。

快速浏览一下 automake 的 remake-hdr.am 即可了解它是如何实现这一点的:

%CONFIG_H%: %STAMP%
## Recover from removal of CONFIG_HEADER
@if test ! -f $@; then \
rm -f %STAMP%; \
$(MAKE) $(AM_MAKEFLAGS) %STAMP%; \
else :; fi


%STAMP%: %CONFIG_H_DEPS% $(top_builddir)/config.status
@rm -f %STAMP%
cd $(top_builddir) && $(SHELL) ./config.status %CONFIG_H_PATH%

并且 config.status 创建标记文件。

此 automake 示例与您的示例之间的主要区别似乎是 automake 涉及标记文件,而在您的示例中它甚至不是真正的文件。

关于svn - 延迟或重复 GNU make 中的先决条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/332122/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com