【问题标题】:Should CMSIS libraries be included in version control? [duplicate]CMSIS 库是否应该包含在版本控制中? [复制]
【发布时间】:2020-05-17 12:26:06
【问题描述】:

通常,我曾经在版本控制中包含芯片供应商 (ST) 和 CMSIS-Core 标头提供的设备特定标头和源。它们并不多,我没有更新它们的习惯。我使用 STM32 微控制器,但我不使用 CUBE 框架标准外设库

最近,我需要使用 CMSIS-DSP 库。 CMSIS-DSP 库带有大量的头文件和源文件。我决定使用大约 5.4 MB 的预编译库 (libarm_cortexM4lf_math.a)。但现在我开始质疑他们是否应该进入版本控制。

我知道在版本控制中管理二进制文件不是一个好主意。但据我所知,CMSIS 并不经常更新。所以我很困惑。这些是我能想到的选项:

  1. 在 repo 中包含 CMSIS 标头和静态二进制文件: 如果我决定不更新这些库,这可能是个好主意。 CMSIS 本身并不经常发布新版本,即使发布了新版本,也可能没有必要在项目中对其进行更新。或者在我的项目中更新之前,我可能会跳过几个版本。
  2. 在 repo 中包含 CMSIS 头文件和源文件: 类似于选项 1,但 git 会更乐意使用文本文件而不是 5+ MB 二进制文件。但我不确定让第 3 方代码更改来污染我的源历史记录是否是个好主意(选项 1 遇到同样的问题,但只有头文件)。
  3. 不要在 repo 中包含 CMSIS: 这会产生一个干净的 repo,但是我必须在克隆项目后手动将库文件复制到项目目录中。我还可以为 CMSIS 指定系统范围的安装文件夹并将其添加到项目中,但这会导致 “works-on-my-machine” 情况。
  4. 找到一种自动获取库的方法:首先想到的是 git 子模块。但是,我不确定获取整个 CMSIS 存储库是否可行,因为我需要对其进行重组,因为有很多不需要的文件,包括预编译的二进制文件。我想我需要某种后处理脚本?

这里最好的方法是什么?还有其他选择吗?

这里有一个类似的问题:Storing third-party libraries in source control 看来人们对这个问题有不同的看法。但我相信在嵌入式 C 项目中使用 CMSIS 是一个特定的案例,值得提出自己的问题。

【问题讨论】:

  • 如果他们是项目的一部分,那么构建项目所需的源代码显然是他们需要的。同样,源代码或构建的库也是项目的一部分。但是这些项目可能在一个大仓库中或单独的,但如果它是项目的源代码,它不应该被控制吗?
  • 你会修改多少?你的流程是什么?您从每种方法中获得了什么?有些人从不允许源代码控制中的二进制文件作为策略。如果没有其他障碍,尝试管理您永远不会更改的软件是浪费时间。一些流程将要求所有内容都必须从源代码构建。在版本控制中包含带有补丁的归档包通常会很好地工作。没有正确的答案,因为它取决于未知的未来事件。我不会将二进制文件放在源代码管理中。构建信息通常与来源一样重要。
  • @Tagli 非常有趣的问题。我想知道选项 #4 怎么样,但不是整个 CMSIS 库,而是托管在其他地方的一个子集?

标签: git version-control arm stm32 cmsis


【解决方案1】:

使用 CMSIS 的 IMO 嵌入式项目应包含使用的版本。 CMSIS 不像 C 标准库那样标准化,而且新版本通常与旧版本不兼容。

链接的帖子已有 12 年历史,并且 (IMO) 回购的规模远没有当时那么重要。现在嵌入式程序员使用的计算机的存储、内存、计算能力和上行连接带宽都比不上12年前的计算机。

【讨论】:

  • 链接的帖子仍然相关。代码大小表示维护代码的努力。 LOC 等指标。如果您不显着修改源,那么升级路径会更容易。如果 CMSIS 版本升级破坏了兼容性,也可能有第三方提供补丁或修订控制系统。如果您永远不会更改它,为什么要将某些内容放入修订控制中?带有 SHA 或其他参考的发布 tarball 很好。如果一个项目是 100K 以上的代码行,而您的更改是一个 40 行的补丁文件,为什么要使用存储库。
  • @artlessnoise uC 项目与可移植 C 项目有很大不同。 tarball 在这里极为罕见,超过 100k 行的项目(实际代码行)甚至比 tarball 更不常见。你的评论来自另一个宇宙
  • 我所说的一切都适用。 100K/40 是一个比率;这才是重要的。如果您没有对事物进行重大修改,那么存储库就会成为生产力的障碍。此外,您对现在情况有所不同的回答似乎与您对我的评论的抱怨形成了直接对比。
  • 在问了这个问题大约 1 年之后,我得出结论认为这个答案是最实用的,因为它允许简单的 git clone & build。我的项目中不需要经常更新第三方库。
猜你喜欢
  • 1970-01-01
  • 2010-11-01
  • 2014-09-06
  • 1970-01-01
  • 1970-01-01
  • 2017-11-25
  • 2012-02-29
  • 2018-02-26
  • 2015-10-06
相关资源
最近更新 更多