2

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

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

问题:

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

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

4

3 回答 3

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
于 2012-12-04T08:35:26.127 回答
1

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

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

于 2021-05-10T19:36:07.670 回答
0

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

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

于 2014-08-10T01:49:40.113 回答