我正在尝试将一个项目从 IAR 迁移到
STM32CubeIDE。在这个项目中,我在 main 中有两行代码(作为全局变量)将编译日期存储在最终的二进制文件中。这两行如下:
- char const compilation_date[] ={'<','c','>',__DATE__[0],__DATE__[1],__DATE__[2],__DATE__[3],__DATE__[4],__DATE__[5],__DATE__[6],__DATE__[7],__DATE__[8],__DATE__[9],__DATE__[10],'<','/','c','>'};
- #pragma required=compilation_date
第一行构建编译字符串日期,第二行告诉 IAR 编译器,尽管代码中未引用该变量,但它必须将其包含在最终二进制文件中。
要将它迁移到 STM32CubeIDE(使用 gcc 编译器),我需要使用 __attribute__((used)) 而不是
#pragma required=compilation_date。所以,移植的代码行是
- char const compilation_month[] __attribute__((used)) ={'<','c','>',__DATE__[0],__DATE__[1],__DATE__[2],__DATE__[3],__DATE__[4],__DATE__[5],__DATE__[6],__DATE__[7],__DATE__[8],__DATE__[9],__DATE__[10],'<','/','c','>'};
问题是当我编译程序时出现以下错误:
- ../Core/Src/main.c: error: initializer element is not constant
原因是 gcc 期望全局变量存储常量值而不是编译时确定的值。
所以,问题是:如何将编译日期存储在最终的二进制文件中?
PS:我的目标是我可以读取二进制文件的编译日期(使用Windows或Linux)