如何使用带有 Keil uVision4 (MDK-ARM) 的构建服务器、编写构建脚本、使用 makefile?

电器工程 手臂 编译器 基尔
2022-01-16 03:05:20

我想运行每日构建,或签入/提交基于 Keil MDK-ARM 的项目的触发构建。到目前为止,我已经了解了 IDE 的批处理文件功能。这确实需要您使用 IDE 至少构建一次项目,然后签入批处理文件以及由 IDE 创建的相关.__i文件._ia

此外,IDE 将许多特定于用户的内容放入批处理文件中,例如 Windows PATH 变量。这可能会成为多个开发人员的问题,因为用于构建的批处理文件可能会在不同开发人员的每次提交时更改。

最终,只需要跟踪armccarmasmArmLink的各种开关。

有没有办法使用更标准的 makefile 来构建 Keil uVision 项目?有没有一种方法可以将 uVision 项目文件转换为更易于维护的构建脚本?

2个回答

这是我最近想出的最好的方法:

在构建选项中,选择创建批处理文件。

当您从 IDE 启动构建时,会根据 IDE 中设置的选项创建一个批处理文件和几个文本文件。您需要在源代码管理中跟踪这些 IDE 生成的文件:

  • *。蝙蝠
  • *.ini
  • *。__一世
  • *._ia
  • *.lnp
  • *.sct

然后 foo.bat 可以从构建脚本启动。

如果您想从生成的批处理文件可靠地构建,这确实会创建需要在源代码控制中跟踪的额外文件,但它确实消除了依赖 Keil 项目文件 (foo.uvproj) 和 IDE 的需要。我发现比较包含编译器标志的生成文本文件 (*.__i) 的差异,从而跟踪更改比 .uvproj 文件更容易。此外,批处理文件直接调用各种工具,armasm、armcc、armlink。这为您提供了每个步骤的直接输出,以及在未来必要时将项目迁移到不同工具链的看似更好的潜力。

我意识到这个答案听起来很像我最初的问题,但我真的不知道使用 Keil 的工具运行脚本构建的更好方法。我要求看看其他人可能会提出什么意见。我并不完全不同意@digikata 的答案,但我更喜欢以更容易的格式使用编译器标志和内存映射以便跟踪,并使用更多的 unix 风格的工具进行编译,而不是启动一体化编译与 IDE。我认为来自 IDE 的一体化编译在我的工作站上运行良好,但不适用于构建服务器。

编辑:构建服务器在 Windows Server 2003 上运行。我必须承认我已经让步于使用 IDE 命令行界面而不是批处理文件。这变得太难管理了。

我通过命令行调用 Keil IDE 从 Makefile 中构建(不是生成的批处理文件)。通常最好通过 scm 锁定项目文件,或者在执行此操作时获取参考构建副本重命名相关项目名称。

IDE 非常乐意使用只读项目文件,因此如果您将它们锁定,则令人烦恼的是您需要解锁它们以更改设置、保存并重新签入。如果您处于相当稳定的状态在项目中这点非常小——甚至是可取的。

如果您获取参考副本,则构建往往会随着项目设置的更改而中断 - 特别是在从编译中添加或删除项目文件时。明确地捕捉这些变化并不一定是坏事,但维护构建需要一个额外的步骤。

无论哪种方式,通过“-o”选项将输出重定向到日志文件都可以让您访问完整的输出日志。日志不会一次出现一行,但似乎都在那里。(我实际上将 Keil 错误格式解析为 GNU fmt 以便与 eclipse CDT 环境集成。这让我在构建后直接跳转到错误/警告)

命令行构建还生成 __i、__ia 文件,因此这些文件也不需要进入构建服务器的版本控制。

希望这可以帮助。