带有版本的 Autotool automake 输出可执行文件名

Autotool automake output executable filename with version

我正在尝试将版本号添加到 autotool 项目的输出可执行文件名中。

使用 libs 非常简单:您可以将 -version-info 选项添加到 Makefile.am

如何用 bin_PROGRAMS

做同样的事情

到目前为止我尝试了:

HELLO_VERSION_CURRENT = 1
HELLO_VERSION_REVISION = 2
HELLO_VERSION_AGE = 1

bin_PROGRAMS = hello_${HELLO_VERSION_CURRENT}_${HELLO_VERSION_REVISION}_${HELLO_VERSION_AGE}
hello_SOURCES = hello.c

这种方式无法编译,因为 SOURCES 必须是:hello_1_2_1_SOURCES,但我不知道如何告诉它自动生成。

另一种方法是 运行 一个 post-build 脚本:如何将 post-build 操作添加到 Makefile.am

最后我将以下内容添加到我的 Makefile.am

all:
    cp ./.libs/hello ./.libs/hello_${HELLO_VERSION_CURRENT}_${HELLO_VERSION_REVISION}_${HELLO_VERSION_AGE}

编辑 我找到了一个新的解决方案

HELLO_VERSION_CURRENT = 1
HELLO_VERSION_REVISION = 2
HELLO_VERSION_AGE = 1

bin_PROGRAMS = hello_$(HELLO_VERSION_CURRENT)_$(HELLO_VERSION_REVISION)_$(HELLO_VERSION_AGE)
hello___HELLO_VERSION_CURRENT____HELLO_VERSION_REVISION____HELLO_VERSION_AGE__SOURCES = hello.c

hello___HELLO_VERSION_CURRENT____HELLO_VERSION_REVISION____HELLO_VERSION_AGE__CFLAGS =
hello___HELLO_VERSION_CURRENT____HELLO_VERSION_REVISION____HELLO_VERSION_AGE__LDFLAGS =

AM_CFLAGS = @hello___HELLO_VERSION_CURRENT____HELLO_VERSION_REVISION____HELLO_VERSION_AGE__CFLAGS@
AM_LDFLAGS = @hello___HELLO_VERSION_CURRENT____HELLO_VERSION_REVISION____HELLO_VERSION_AGE__LDFLAGS@

CLEANFILES = *~ 

你可以这样做:

HELLO_VERSION_CURRENT = 1
HELLO_VERSION_REVISION = 2
HELLO_VERSION_AGE = 1

bin_PROGRAMS = hello_$(HELLO_VERSION_CURRENT)_$(HELLO_VERSION_REVISION)_$(HELLO_VERSION_AGE)
hello_$(HELLO_VERSION_CURRENT)_$(HELLO_VERSION_REVISION)_$(HELLO_VERSION_AGE)_SOURCES = hello.c

不过,在那种情况下,我建议使用更短的变量名...

在你的 Makefile.am 中使用一些 preset autoconf output variables 怎么样:

bin_PROGRAMS = hello_@PACKAGE_VERSION@

hello_@PACKAGE_VERSION@_SOURCES = hello.c

前面的内容在 autoconf v2.69 和 automake v1.15 上对我有用。

在您的源代码中使用 PACKAGE_VERSION 更容易:#include "config.h",所有 autoconf 输出变量都是 #defined。例如:

/* config.h.  Generated from config.h.in by configure. */
/* config.h.in.  Generated from configure.ac by autoheader. */

...

#define PACKAGE_VERSION "1.2.3-rc-whatever"

参考:

https://www.gnu.org/software/autoconf/manual/autoconf#Output-Variable-Index