【发布时间】:2020-05-17 12:26:06
【问题描述】:
通常,我曾经在版本控制中包含芯片供应商 (ST) 和 CMSIS-Core 标头提供的设备特定标头和源。它们并不多,我没有更新它们的习惯。我使用 STM32 微控制器,但我不使用 CUBE 框架 或 标准外设库。
最近,我需要使用 CMSIS-DSP 库。 CMSIS-DSP 库带有大量的头文件和源文件。我决定使用大约 5.4 MB 的预编译库 (libarm_cortexM4lf_math.a)。但现在我开始质疑他们是否应该进入版本控制。
我知道在版本控制中管理二进制文件不是一个好主意。但据我所知,CMSIS 并不经常更新。所以我很困惑。这些是我能想到的选项:
- 在 repo 中包含 CMSIS 标头和静态二进制文件: 如果我决定不更新这些库,这可能是个好主意。 CMSIS 本身并不经常发布新版本,即使发布了新版本,也可能没有必要在项目中对其进行更新。或者在我的项目中更新之前,我可能会跳过几个版本。
- 在 repo 中包含 CMSIS 头文件和源文件: 类似于选项 1,但 git 会更乐意使用文本文件而不是 5+ MB 二进制文件。但我不确定让第 3 方代码更改来污染我的源历史记录是否是个好主意(选项 1 遇到同样的问题,但只有头文件)。
- 不要在 repo 中包含 CMSIS: 这会产生一个干净的 repo,但是我必须在克隆项目后手动将库文件复制到项目目录中。我还可以为 CMSIS 指定系统范围的安装文件夹并将其添加到项目中,但这会导致 “works-on-my-machine” 情况。
- 找到一种自动获取库的方法:首先想到的是 git 子模块。但是,我不确定获取整个 CMSIS 存储库是否可行,因为我需要对其进行重组,因为有很多不需要的文件,包括预编译的二进制文件。我想我需要某种后处理脚本?
这里最好的方法是什么?还有其他选择吗?
这里有一个类似的问题:Storing third-party libraries in source control 看来人们对这个问题有不同的看法。但我相信在嵌入式 C 项目中使用 CMSIS 是一个特定的案例,值得提出自己的问题。
【问题讨论】:
-
如果他们是项目的一部分,那么构建项目所需的源代码显然是他们需要的。同样,源代码或构建的库也是项目的一部分。但是这些项目可能在一个大仓库中或单独的,但如果它是项目的源代码,它不应该被控制吗?
-
你会修改多少?你的流程是什么?您从每种方法中获得了什么?有些人从不允许源代码控制中的二进制文件作为策略。如果没有其他障碍,尝试管理您永远不会更改的软件是浪费时间。一些流程将要求所有内容都必须从源代码构建。在版本控制中包含带有补丁的归档包通常会很好地工作。没有正确的答案,因为它取决于未知的未来事件。我不会将二进制文件放在源代码管理中。构建信息通常与来源一样重要。
-
@Tagli 非常有趣的问题。我想知道选项 #4 怎么样,但不是整个 CMSIS 库,而是托管在其他地方的一个子集?
标签: git version-control arm stm32 cmsis