CMSIS 库应该包含在版本控制中吗?

Should CMSIS libraries be included in version control?

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

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

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

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

最好的方法是什么?可以有其他选择吗?

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

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

链接的 post 已有 12 年历史,(IMO) 回购协议的规模远不如当时那么重要。现在嵌入式程序员使用的计算机的存储、内存、计算能力和上行连接带宽都无法与12年前使用的计算机相提并论。