国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 服務器 > Linux服務器 > 正文

linux 程序、動態庫、靜態庫內部添加版本號和編譯時間詳解

2024-09-05 23:03:23
字體:
來源:轉載
供稿:網友

給程序和庫添加版本號和庫,有利于維護和升級。

當然你可以在文件名上體現,比如有個程序叫 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" 的行,否則其他信息太多不好找。

此方法也可適用于可執行程序添加版本信息。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 泊头市| 横峰县| 英德市| 鹤峰县| 九江县| 镇平县| 霍山县| 抚松县| 治多县| 麻栗坡县| 环江| 南宫市| 苏尼特右旗| 吕梁市| 武平县| 富平县| 永修县| 手游| 新巴尔虎右旗| 武夷山市| 屏东县| 安图县| 上蔡县| 白玉县| 平罗县| 汪清县| 民和| 环江| 仙桃市| 大田县| 武邑县| 凉山| 霍山县| 十堰市| 西盟| 东台市| 布拖县| 全州县| 禹州市| 德州市| 逊克县|