我在IAR中配置了自定义构建工具。它需要一个文本文件并输出一个由其他C文件使用的.h文件。当我将.h文件添加到输出文件列表时,它将作为完整重建的第一步删除。自定义构建步骤在链接后在构建结束时执行。这导致.c文件的编译取决于.h失败。
另一个选择是将自定义构建步骤放在项目的预构建步骤中。但是,无论.txt文件是否更改,都始终执行此操作。
问题:
我可以让IAR了解.c文件对.h文件的依赖性,并在编译之前运行自定义构建步骤吗?
如果无法做到这一点,我是否可以在开始时强制执行自定义构建步骤?
答案 0 :(得分:1)
在较新的 EWARM 版本中,自定义构建步骤提供了一个复选框“在所有其他工具之前运行自定义构建工具”。 我不知道它是在哪个版本中添加的,但我可以确认它存在于 EWARM 7.60 和更新版本中。
旧版本的另一种可能解决方法是将“只读”属性设置为生成的头文件。这可以防止 EWARM 在构建运行开始时删除该文件。当然这需要生成头文件的工具才能覆盖只读文件。这通常可以通过批处理文件运行外部工具来实现,在运行工具之前去除只读属性,然后在文件生成后直接恢复只读属性。
答案 1 :(得分:0)
我的解决方案是将预构建步骤输出到临时文件,只有在原始文件不同时才将其复制。预构建步骤始终运行,但如果结果与上次相同,则不会触发完整的重新编译。
将其放入批处理文件中,并将其作为预构建步骤:
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 :(得分:0)
IAR似乎按字母顺序编译文件。在我的情况下,源文件是CSV文件,并且自定义工具通过修改CSV文件生成的中间文件是C和H文件(H文件由其他源文件使用)。
我通过将00添加到自定义工具生成的中间C和H文件的名称来解决这个问题。由于按字母顺序排列的IAR行为,通过自定义工具进行的CSV到C / H转换在开始时就会发生。