【问题标题】:Using C macros in eclipse post-build step在 Eclipse 构建后步骤中使用 C 宏
【发布时间】:2020-11-05 12:26:09
【问题描述】:

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

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

在进行了一些重大更改之后,我们必须重新编译具有不同版本的代码,因此我宁愿将版本保存在一个位置(最好在 main.h 中)。有什么方法可以在 eclipse 中做到这一点,还是我必须忍受痛苦并手动在多个位置进行更改?

我使用的是 Eclipse Neon.3 Release (4.6.3),因为我使用的是系统工作台,这是他们的默认版本。

【问题讨论】:

  • 一些minimal, reproducible example 会有所帮助
  • 不要在 .h 文件中这样做。在eclipse中定义符号并将其作为-D参数传递给gcc。
  • @P__J__ 是否有理由不将其放入 .h 文件中,或者将其放入符号中是否更容易?因为 release 和 debug 的符号不同,所以放在那里意味着我应该在两个地方更改它。
  • 在header中包含版本信息的好处是可以对信息进行版本控制。

标签: c eclipse post-build


【解决方案1】:

你有一些工具可以做到:

  1. 您的构建
  2. 此帖子构建步骤

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

【讨论】:

  • 你能详细说明一下吗?如何从我的 C 代码中提取它,我不确定如何将它作为 -D 参数传递。
【解决方案2】:

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

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

这一行提取版本:

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

【讨论】:

    猜你喜欢
    • 2011-01-20
    • 2019-02-22
    • 1970-01-01
    • 2023-03-29
    • 1970-01-01
    • 2014-06-29
    • 2019-05-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多