我有一个我建立并向客户发布的库。该平台是linux。
我想知道是否有任何方法可以生成库版本并构建版本作为构建的一部分?
这将有助于我将不同客户报告的任何问题与特定版本的构建相关联。
答案 0 :(得分:2)
有两个选项:
将版本信息嵌入到库的名称中,例如libmy.so.1.2,应该在您的安装中软链接到libmy.so,以便能够在运行时解析它。修改构建工具以适应这种情况。这是一种常见的方法,但对于构建标签来说并不是很方便。
您可以尝试通过一些静态字符串将版本信息嵌入到库中。在Unix上,您没有具有版本信息的资源(如在Windows上),因此这是唯一的方法。可能的方法可以是:
一个。使用以下内容创建一个C / C +源文件(version.cxx):
#include <version.h>
static char version_stamp[]="\n@(#) " PRODUCT " " VERSION " " BUILD_NUMBER;
(根据您的需要更改格式)
湾创建version.h,您可以在其中定义PRODUCT / VERSION / BUILD_NUMBER宏的值。您可以在构建过程中生成/修改此标头,也可以手动修改它。 E.g:
#define PRODUCT "MyProduct"
#define VERSION "1.2.1"
#define BUILD_NUMBER "241"
℃。确保您的版本C / C ++文件(version.cxx)链接到产品中的每个库/可执行文件。根据需要修改构建工具。
然后在链接库之后,您可以使用此命令获取其版本:
strings libmy.so | grep '@(#)'
如果您的计算机上安装了SCCS(某些Unix可以),您可以运行:
what libmy.so
(这就是我上面使用@(#)前缀的原因)
BTW可以在Windows上使用相同的方法:只需将上面提到的标题包含在.rc文件中,并定义版本资源(并将.rc链接到产品中的每个二进制文件)。因此,您可以在一个地方定义版本,并在所有平台和所有二进制文件上共享。
(2)中的另一个好处是,您可以在必要时(例如在日志文件中)在运行时代码中使用上面标题中的版本宏。