linux 程序、动态库、静态库内部添加版本号和编译时间详解
作者:jingxian 发布时间:2023-08-17 09:55:28
给程序和库添加版本号和库,有利于维护和升级。
当然你可以在文件名上体现,比如有个程序叫 yun,文件名写为 yun_1.0.2,但这个需要每次手动维护,而且不能100%确保当前程序就是那个版本。所以,把版本号体现在程序内部,是一个不错的选择。
----------------------------- 我是做法分割线 -------------------------------
一、可执行程序
程序内部定义版本宏,然后 main 函数通过 -v 参数,打印版本号和编译时间,代码如下:
注:__DATE__(编译日期), __TIME__(编译时间)
#include <stdio.h>
#include <string.h>
#define VERSION"0.0.2" // 此处每次发布版本要手动更新
#define NAME"yun"
static void show_info(char *argv[])
{
if (0 == strcmp("-v", argv[1]))
{
printf("%s version: %s (%s, %s)\n", NAME, VERSION, __DATE__, __TIME__);
return;
}
else if (0 == strcmp("-h", argv[1]))
{
printf("Usage: %s [options]\n", NAME);
printf("Options:\n");
printf(" void\tRun %s\n", NAME);
printf(" -v\tDisplay %s version information\n", NAME);
printf(" -h\tDisplay help information\n");
return;
}
printf("Usage: %s [-v | -h]\n", NAME);
return;
}
int main(int argc, char *argv[])
{
if (2 == argc)
{
show_info(argv);
return 0;
}
printf("Can you feel me?\n");
return 0;
}
运行效果:
二、动态库、静态库
库不采用 -v 这种方法,因为不是可执行程序。
我们可以给程序添加一个版本号字符串,编译成库后使用 strings 命令查看,代码如下:
/* add.h */
#ifndef _ADD_H_#define _ADD_H_int add(int a, int b);#endif /* _ADD_H_ */
/* add.c */
#include "add.h"// 此处每次发布版本要手动更新const char *LIB_INFO = "libadd version: 0.0.3 (2015-01-30, 08:30)";int add(int a, int b){return (a + b);}
编译及运行结果:
/* 静态库 */
/* 动态库 */
说明:
strings 命令: 用于显示文件中的可打印字符。
grep: 用于过滤无用信息,因为自定义的库信息包含 "version",所以就只显示包含 "version" 的行,否则其他信息太多不好找。
此方法也可适用于可执行程序添加版本信息。
猜你喜欢
- Windows 2000 Server安装成功后,一般会启动一个默认的Web站点,为整个网络提供Internet服务。在中小型局域网中,服务
- 360总裁齐向东:咱员工福利待遇业内肯定领先 (腾讯科技摄)11月5日消息,360安全卫士总裁齐向东近日表示,360已经组建了国内最强大的安
- 邮件服务器的主要性能参数应当包括:SMTP发信效率、POP3收信效率、Web邮件方式下的收发邮件效率、邮件服务器消息转发效率等等。下面是我们
- 还记得诺基亚的成名广告语吗——“科技以人为本”。您可千万别小看这句话,西方科技之所以如此发达,很大程度上就源自于“以人为本”理念的贯彻。小到
- 导入链接指的是从外部网站的页面上链回您的网站的链接。导入链接能够给您的网站带来新的用户,而且当这些链接是有价值的、网站编辑自愿选择的链接时,
- WSDL设计继承了以XML为基础的当代Web技术标准的开放设计理念。它允许通过扩展使用其它的类型定义语言(不光是XMI Schema),允许
- 1、打开httpd.conf,查找Listen:80,在下面一行加入Listen:8080;2、查找#Include conf/extra/
- 在Windows xp、Windows 2000操作系统下如果需要调试Asp程序,首先需要判断您所安装的系统是否具备调试Asp的环境,IIS
- 由于多数是国内空间转国外空间的朋友,所以碰到最多的问题集中在对WHM+cPanel使用上的不了解,而WHM+cPanel的这种集众多功能于一
- 北京时间10月25日,据国外媒体报道,谷歌周三在其分析师日会议上介绍了其建立流行的iGoogle个人主页的最新情况。随着iGoogle的变化
- 【搜狐IT消息】(文/雷风)6月25日,原微软中国总裁、盛大网络总裁唐骏在接受搜狐IT采访时对比尔·盖茨进行了评价,并回顾了与盖茨交往中难忘
- 1.资源文件Matlab安装包系统:Ubuntu18.04Matlab版本:2020b Matlab99R2020b_Linux_64.is
- 先前我曾经报道过Google即将推出通过Google Analytics统计Google Adsense的功能,今天,我登录AdSense后
- 就在Windows 7正式发售的前一天,微软放出了两个重要工具:软硬件兼容中心(Compatibility Center)、升级顾问(Upg
- 最新消息,日前国内知名垂直IT资讯网站泡泡网( * OP)推出专业社交网络(SNS)平台我的炮兵团(http://tuan.pcpop.co
- 所谓“病毒式网络营销”,是通过用户的口碑宣传网络,信息像病毒一样传播和扩散,利用快速复制的方式传向数
- 目前,网上能找到不少WebMail软件,但多为商业软件,动辄支持百万级用户。它们虽然功能很强,但对一般单位来讲,有点儿“大材小用”。那么,能
- 第一阶段 此阶段主要是能熟练地使用某种语言。这就相当于练武中的套路和架式这些表面的东西。 第二阶段 此阶段能精
- 伪静态的作用大家都很清楚,最主要就是利于SEO,再有就是好看。Discuz X2.0不知道怎么的后台没有写重定向规则,找来了下面这一段,适合
- 11月26日,针对360安全浏览器与金山网盾之间的口舌之争,金山公司今日向TechWeb发来声明,称金山网盾于11月23日第一时间拦截了IE