依赖管理
XCommon CMake 提供了一种依赖管理方案,可以获取要在应用程序中使用的模块。这些模块通过 git 克隆并放置在沙箱的根目录中。
从应用程序的 CMakeLists.txt 文件开始,APP_DEPENDENT_MODULES 变量定义了应用程序的直接依赖。当包含每个依赖的 lib_build_info.cmake 文件时,它们的 LIB_DEPENDENT_MODULES 变量定义子依赖关系,从而构建一个深度优先遍历以填充沙箱的树结构。
例如,假设应用程序的 CMakeLists.txt 包含 set(APP_DEPENDENT_MODULES lib_mod0 lib_mod1),然后这些模块在它们的 lib_build_info.cmake 文件中定义如下:
lib_mod0 set(LIB_DEPENDENT_MODULES "lib_mod2")
lib_mod1 set(LIB_DEPENDENT_MODULES "lib_mod2" "lib_mod3")
lib_mod2 set(LIB_DEPENDENT_MODULES "lib_mod3")
lib_mod3 set(LIB_DEPENDENT_MODULES "")
那么依赖模块将按以下顺序获取:lib_mod0, lib_mod2, lib_mod3, lib_mod1。
如果沙箱中不存在某个依赖项,它将在树结构遍历时首次被获取。如果后续作为另一个模块的依赖再次出现,将不会再次获取,因为它已经存在于沙箱中。
APP_DEPENDENT_MODULES 和 LIB_DEPENDENT_MODULES 变量定义了依赖列表,其中每个元素都是一个字符串,指定从哪里获取源代码及其版本。完整的格式说明请参见“依赖格式”。
获取操作是通过克隆 git 仓库完成的,这可以通过 HTTPS(对于公开仓库)或配置了无密码访问的 SSH 密钥进行。
如果这些依赖还不在沙箱中,则会被检索到沙箱中。应用程序必须使用 XMOS_SANDBOX_DIR 变量来指定沙箱的根位置。如果应用程序或静态库没有依赖,则不需要设置此变量。
在解决依赖关系的过程中,如果模块已存在于沙箱中,则不会进行修改。如果后续需要不同版本的模块,过程是使用标准的 git 命令切换到所需版本,然后在应用程序目录中运行 cmake 构建。
沙箱清单
在跟踪分支时,记录每个模块使用的实际版本通常很有用。
每当 CMake 为应用程序或静态库生成构建环境时,会在构建目录中创建一个名为 manifest.txt 的文件。
清单文件的列包括:
- Name:应用程序或库的名称
- Location:克隆仓库的 git 远程位置
- Branch/tag:当前检出的分支或标签。如果你选择了分支的最新更改,但这个更改也有一个标签,那么系统会显示这个标签。
- Changeset:标识当前检出变更集的 git 提交哈希
- Dependency_Requirement:(默认隐藏)依赖模块列表变量的要求。如果开发者手动检出了不同版本,则此要求可能与当前变更集不同。只有在以 -D FULL_MANIFEST=TRUE 选项运行 CMake 时,此列才会显示。
如果某些列不适用于特定依赖项,它们将显示为连字符:-。