gpt4 book ai didi

c++ - 将版本和架构信息插入 C++ 源代码的最佳方式是什么?

转载 作者:搜寻专家 更新时间:2023-10-31 00:48:57 25 4
gpt4 key购买 nike

我希望我的 C++ 程序包含一个“--version”选项,它会打印出来:

  • 编译的架构
  • 源版本(例如 v0.1.0)
  • 应用名称

我也是第一次使用 autoconf/automake,我注意到 configure.ac 有二进制文件和版本。它目前没有架构信息,我不想添加此类信息,因为我将在多个架构下进行编译。

有没有一种简单的方法可以在头文件或源文件中自动插入版本/体系结构/应用程序名称信息?大多数 C++ 编码人员如何做到这一点?

最佳答案

autoconf给你一个config.h,里面提供了PACKAGEPACKAGE_NAMEPACKAGE_STRING等字符串宏、PACKAGE_VERSIONVERSION

(当我使用 Argp 参数解析器时,我只是使用

#ifdef HAVE_CONFIG_H
# include <config.h>
#endif
#include <argp.h>
const char *argp_program_version = PACKAGE_STRING;
const char *argp_program_bug_address = PACKAGE_BUGREPORT;
/* et cetera */
int main(int argc, char **argv) {
error_t argp_result = argp_parse(&argp, argc, argv, 0, 0, NULL);
if (argp_result) return argp_result;
/* et cetera */
}

然后 --help--version 等就自动工作了。)

你也可以添加

AC_CANONICAL_HOST
AC_DEFINE_UNQUOTED([CHOST], ["$host"], [Canonical host])
AC_CANONICAL_BUILD
AC_DEFINE_UNQUOTED([CBUILD], ["$build"], [Canonical build])
AC_CANONICAL_TARGET
AC_DEFINE_UNQUOTED([CTARGET], ["$target"], [Canonical target])

到你的 configure.ac,如果你也想在你的 config.h 中有那些字符串宏。这些通常是 $arch-$vendor-$kernel-$libc 形式的字符串,其中
CHOST 是构建软件后运行软件的平台,
CBUILD 是当前构建软件的平台,
CTARGET 是软件运行的平台。
(除非您正在交叉编译或构建交叉编译工具链,否则这些都是相同的。)

关于c++ - 将版本和架构信息插入 C++ 源代码的最佳方式是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2096709/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com