在 eclipse post-build 步骤中使用 C 宏

Using C macros in eclipse post-build step

这个问题以前有人问过(有些问题是 5 年或 10 年前的)但没有任何真正的答案,通常使用了不同的方法。

我正在从事一个根本不可能采用不同方法的项目。我们正在使用第三方 post-build 步骤,需要一些参数(版本)作为输入的一部分。使用 #define 在 C 代码中设置版本,因为某些设置是根据版本的不同部分设置的。

经过一些重大更改后,我们必须使用不同版本重新编译代码,因此我宁愿将版本保留在一个位置(最好在 main.h 中)。有没有办法在eclipse中做到这一点,还是我必须忍受痛苦并手动在多个位置进行更改?

我使用的是 Eclipse Neon.3 版本 (4.6.3),因为我使用的是系统 workbench,这是它们的默认版本。

您有一些工具可以:

  1. 你的构建
  2. 这个post构建步骤

从您的 C 项目(在 1 中)中提取版本 #define,并将其存储在构建系统变量中。然后将其作为 -D 参数传递给必要的文件(在 1 中),并以步骤 2 期望的任何方式作为参数传递。

使用 -D 参数(在项目属性 > C/C++ 构建 > 设置 > 工具设置 > 预处理器中)没有为我完成这项工作,因为宏或构建变量定义基于它们在 post-build 步骤中没有扩展。

我的解决方法是编写一个 shell 脚本来从头文件中读取版本,然后将其传递给 post-build。所以我在我的脚本中调用另一个脚本来提取版本。这样我就可以更改代码中的版本而不是日食设置的迷宫。

这一行提取版本:

fw_version=$(cat "$projectdir/../Inc/main.h" | grep "FW_VERSION" | cut -d ' ' -f 3-)