带有版本的 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 输出变量都是 #define
d。例如:
/* 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
我正在尝试将版本号添加到 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 输出变量都是 #define
d。例如:
/* 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