IAR 打印环境变量字符串:预处理器定义的符号

IAR print environment variable string : Preprocessor Defined symbols

作为我们构建 Jenkins 的一部分,Jenkins 有很多环境变量。其中两个是 BUILD_NUMBER 和 BRANCH_NAME。我们将这些添加到预处理器定义的符号中:

这些环境变量现在可以在编译时访问:

#define APPLICATION_VERSION_MAJOR         (1)
#define APPLICATION_VERSION_MINOR         (1)
#define APPLICATION_VERSION_BUILD         (BUILD_NUMBER)
#define GIT_BRANCH_NAME                   (BRANCH_NAME)

使用 BUILD_NUMBER 没问题,它是一个数字,但在尝试使用 BRANCH_NAME 时出现错误。例如:

debug(DEBUG_LEVEL_INFO, "software version %d.%d.%d  branch %s", APPLICATION_VERSION_MAJOR, APPLICATION_VERSION_MINOR, APPLICATION_VERSION_BUILD, GIT_BRANCH_NAME);

我收到错误:

Error[Pe020]: identifier "localbuild" is undefined D:\repo\source\state_machine.c 284 

环境变量 BRANCH_NAME 设置为 "localbuild",编译器正在获取正确的值。但是,如何在我的代码中使用它?它适用于数字,但我如何对字符串执行同样的操作?

简单的回答,必须像这样添加一个字符串环境变量: BRANCH_NAME="$_BRANCH_NAME_$"

考虑使用:

#define STRINGIFY(x)         #x
#define EVALUATE_STRING(x)   STRINGIFY(x)
#define GIT_BRANCH_NAME      EVALUATE_STRING(BRANCH_NAME)

如果您有这些定义加上:

#define BRANCH_NAME localbuild

(这可能是在命令行上用 -DBRANCH_NAME=localbuild 之类的东西设置的——通常,你不能从 C 预处理器访问环境变量),然后你使用它:

printf("Git branch name [%s]\n", GIT_BRANCH_NAME);     

输出如下:

printf("Git branch name [%s]\n", "localbuild");