【问题标题】:IAR Custom Build at Beginning of Rebuild重建开始时的 IAR 自定义构建
【发布时间】:2012-11-29 18:22:21
【问题描述】:

我在 IAR 中配置了一个自定义构建工具。它接受一个文本文件并输出一个供其他 C 文件使用的 .h 文件。当我将 .h 文件添加到输出文件列表时,它作为完整重建的第一步被删除。自定义构建步骤在链接后构建结束时执行。这会导致根据 .h 编译 .c 文件失败。

另一种选择是将自定义构建步骤放在项目的预构建步骤中。但是,无论 .txt 文件是否更改,都会执行此操作。

问题:

  1. 我能否让 IAR 了解 .c 文件对 .h 文件的依赖关系,并在编译之前运行自定义构建步骤?

  2. 如果这不可能,我至少可以强制自定义构建步骤在开始时进行吗?

【问题讨论】:

  • 我不确定 IAR 但您可能会使用某种 makefile 并将“make ”作为您的预构建步骤,前提是您安装了 MinGW...我确定您也可以学习如何使用 Microsoft 的 makefile 甚至 IAR。
  • 我完全同意 makefile 几乎可以解决这个问题。但是 IAR 是我必须使用的解决方案,而更好的解决方案是在 EWARM 范围内运行的解决方案。此外,如果它在工具内部,则意味着它是一键式编译和下载到目标并放入调试器。不得不跳出 IDE 可能并不理想。不过感谢您的建议。

标签: c iar


【解决方案1】:

我的解决方案是将预构建步骤输出到一个临时文件,如果它不同,则仅将其复制到原始文件上。预编译步骤始终运行,但如果结果与上次相同,则不会触发完整的重新编译。

把它放在一个批处理文件中,让它成为你的预构建步骤:

your_prebuild_application > SVN_Revision_tmp.h

fc /b SVN_Revision_tmp.h SVN_Revision.h > nul
if errorlevel 1 goto newfile

del SVN_Revision_tmp.h
goto end

:newfile
del SVN_Revision.h
rename SVN_Revision_tmp.h SVN_Revision.h
goto end

:end

【讨论】:

    【解决方案2】:

    在较新的 EWARM 版本中,自定义构建步骤提供了一个复选框“在所有其他工具之前运行自定义构建工具”。 我不知道它是在哪个版本中添加的,但我可以确认它存在于 EWARM 7.60 及更高版本中。

    旧版本的另一种可能的解决方法是将“只读”属性设置为生成的头文件。这可以防止 EWARM 在构建运行开始时删除该文件。当然这需要生成头文件的工具能够覆盖只读文件。这通常可以通过批处理文件运行外部工具来实现,在运行工具之前删除只读属性,然后在文件生成后直接恢复只读属性。

    【讨论】:

      【解决方案3】:

      IAR 似乎按字母顺序编译文件。在我的例子中,源文件是 CSV 文件,而自定义工具通过修改 CSV 文件生成的中间文件是 C 和 H 文件(H 文件被其他源文件使用)。

      我通过在自定义工具生成的中间 C 和 H 文件的名称前添加 00 解决了这个问题。由于字母 IAR 行为,CSV 到 C/H 的转换通过自定义工具发生在开始。

      【讨论】:

      • 请注意,这可能不适用于更高版本的 IAR。那些默认启用 parallel build 并使用多个内核进行编译。文件不一定按字母顺序编译。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-07-17
      • 1970-01-01
      • 2016-09-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多