我正在尝试使用 autoconf 创建 Linuz 动态链接共享库 (.so),但是,无论我做什么,它都会错误地版本化该文件。我得到的是 libWebLoom.so.0.0.1 而不是 libWebLoom.so.0.1.0。
我不确定我做错了什么,我已经通过autconf的帮助,但我无法解决它。
/Makefile.am
ACLOCAL_AMFLAGS = -I m4
SUBDIRS = src
/src/Makefile.am
SUBDIRS = WebLoom
/src/WebLoom/Makefile.am
AM_CPPFLAGS = -g -std=c++17 -Wall -Wextra -fPIC -I.
lib_LTLIBRARIES = libWebLoom.la
libWebLoom_la_SOURCES = Context.cpp
libWebLoom_la_LDFLAGS = -version-info $(LT_VERSION)
libWebLoom_la_LIBADD = $(LDADD)
CLEANFILES = $(lib_LTLIBRARIES)
/configure.ac
AC_INIT([WebLoom], [0.1.0], [[email protected]])
AC_CONFIG_MACRO_DIRS([m4])
AM_INIT_AUTOMAKE([foreign subdir-objects])
LT_INIT
AC_PROG_CXX
CURRENT=$(echo $PACKAGE_VERSION | cut -d. -f1)
REVISION=$(echo $PACKAGE_VERSION | cut -d. -f2)
AGE=$(echo $PACKAGE_VERSION | cut -d. -f3)
AC_MSG_NOTICE([--- Version: $CURRENT.$REVISION.$AGE])
AC_SUBST(VERSION_MAJOR, [$CURRENT])
AC_SUBST(VERSION_MINOR, [$REVISION])
AC_SUBST(VERSION_PATCH, [$AGE]),
LT_VERSION="$CURRENT:$REVISION:$AGE"
AC_SUBST(LT_VERSION)
AC_OUTPUT
我得到的输出是:
Nov 5 10:29 libWebLoom.a
Nov 5 10:29 libWebLoom.la -> ../libWebLoom.la
Nov 5 10:29 libWebLoom.lai
Nov 5 10:29 libWebLoom.so -> libWebLoom.so.0.0.1
Nov 5 10:29 libWebLoom.so.0 -> libWebLoom.so.0.0.1
Nov 5 10:29 libWebLoom.so.0.0.1
Libtool 生成的共享库名称末尾的
x.y.z
并不旨在根据语义版本控制方案进行解释,并且它通常不对应于您为包的版本选择的任何语义版本号。图书馆属于哪个。 这些不匹配有很好的技术原因。 Libtool 的特定版本控制设计有其逻辑原因,但这些以及由此产生的设计是否良好则更具争议性。
您可以在 Libtool 手册第 7 章中阅读有关 Libtool 版本控制的所有内容,如果您打算使用该版本控制,则应该这样做。 您还应该了解,表达给 libtool 的三个版本参数并不直接映射到共享库名称末尾的数字三元组。 前者供 Libtool 使用,而后者是供其他软件(例如链接器)使用的摘要形式。
如果您想使用包的语义版本号标记 libtool 构建的共享库,则可以使用-release
标志而不是库的
-version-info
中的
LDFLAGS
标志。 这会将版本号合并到库的基本名称中,但请注意:其中一个影响是包的任何两个版本都不会彼此二进制兼容。