编译时捕获编译环境信息 优化C程序版本显示代码需求
编译时环境信息捕获与版本输出优化
当前版本输出代码
void v_version() /* Display version information */ { fprintf(stdout, "%s: Version %s %s", FILENAME, VERSION, COMMIT_ID); if (__DATE__[4] == ' ') fprintf(stdout, " 0"); else fprintf(stdout, " %c", __DATE__[4]); fprintf(stdout, "%c %c%c%c %s %s", __DATE__[5], __DATE__[0], __DATE__[1], __DATE__[2], &__DATE__[9], __TIME__ ); fprintf(stdout, " (build: %s)\n", BUILD ); }
输出示例
my-program: Version 0.8 [Commit ID: 5c18dcf] 14 Oct 23 22:26:41 (build: 0092)
已优化的版本输出代码
void v_version() /* Display version information */ { fprintf(stdout, "%s: Version %s %s", NAME, VERSION, COMMIT_ID); fprintf(stdout, " %02d %3.3s %s %5.5s", atoi(&__DATE__[4]), &__DATE__[0], &__DATE__[9], __TIME__ ); fprintf(stdout, " (build: %s)\n", BUILD ); }
需求说明
希望在版本信息中尽可能多地捕获以下编译时详情:
- 操作系统信息
- 编译命令行参数(例如
-fcommon -Wall -pedantic -std=gnu99) - 编译器版本
- 编译系统的处理器架构
已知多数UNIX/Linux系统可通过Makefile定义宏实现,但需避免这种方式,确保即使不使用Makefile编译源码,也能自动捕获上述信息。
内容的提问来源于stack exchange,提问作者Mike T.
相关产品推荐
相关产品推荐

