我需要声明一个变量作为命令的输出。 我尝试过:
AC_DEFINE_UNQUOTED([SVN_REV], ["$(shell svnversion -n .)"], [Define svn revision number])
在config.h中我找到:
#define SVN_REV ""
如果我尝试:
AC_DEFINE([SVN_REV], ["$(shell svnversion -n .)"], [Define svn revision number])
config.h中的有:
#define SVN_REV "$(shell svnversion -n .)"
如何在config.h中将SVN_REV定义为正确的值?
最好的问候
答案 0 :(得分:1)
我认为你不能单独configure.ac
做你想做的事。这段代码:
$(shell svnversion -n .)
似乎适用于实际运行make
的时间。当configure
拨打AC_OUTPUT
时,您的所有AC_DEFINE
都会被写入config.h
。哪个是之前的 make
,因此当时编写的任何内容都不会出现在make
环境中。您可以在configure
环境中运行此命令:
SVNVERSION_REV=`svnversion -n .`
AC_DEFINE_UNQUOTED([SVN_REV],
["$SVNVERSION_REV"],
[Define svn revision number])
具有大致相同的效果。版本号将易于破坏(例如,修改文件并在configure
之后提交它们)。解决方案是从Makefile.am
驱动所有版本的内容,而不是configure.ac
。
将该版本信息输入autotools有点棘手。这是我用于将subversion版本插入.spec文件的某种修改版本。
首先,我使用AX_WITH_PROG(或类似内容)抓取svnversion
二进制文件:
<强> configure.ac 强>
# check for svnversion (not required, except for the maintainer)
AX_WITH_PROG([SVNVERSION], [svnversion])
<强> Makefile.am 强>
# copy svnstamp to svn-revision
# if svn-revision non-existent or svnstamp is newer
svn-revision : $(top_builddir)/svnstamp
if test ! -f $@ -o $< -nt $@; then \
cp $< $@; \
fi
# always do this check to avoid staleness
.PHONY : svnstamp_
# This is supposed to do nothing
# all the work to create this file is in svnstamp_
$(top_builddir)/svnstamp : svnstamp_
@/bin/true
# run the command only if the codebase is a svn working copy
# I've taken out the RPM related strings so you might be able
# to plug it into your code more easily
svnstamp_ :
if test -d $(top_srcdir)/.svn ; then \
SVN_VERSION_STAMP=`$(SVNVERSION) $(top_srcdir) -n`; \
NEW_STAMP=`echo -n "$$SVN_VERSION_STAMP"`; \
if test ! -f $(top_builddir)/svnstamp; then \
echo "$$NEW_STAMP" > $(top_builddir)/svnstamp; \
else \
OLD_STAMP=`cat $(top_builddir)/svnstamp`; \
if test "$$OLD_STAMP" != "$$NEW_STAMP" ; then \
echo "$$NEW_STAMP" > $(top_builddir)/svnstamp; \
fi \
fi \
else \
if test ! -f $(top_builddir)/svnstamp \
-o $(top_srcdir)/svn-revision \
-nt $(top_builddir)/svnstamp; then \
cp $(top_srcdir)/svn-revision $(top_builddir)/svnstamp; \
fi \
fi; \
NEW_STAMP=`cat $(top_builddir)/svnstamp`; \
if test "x$$NEW_STAMP" = "x"; then \
echo " Failed to make svnstamp"; \
exit 1; \
fi
为了对需要版本标记的翻译单元执行此操作,您需要使它们成为svn-revision
的依赖项,并在构建步骤中执行以下操作:
... -DSVN_REV=\"`cat svn-revision`\" ...