构建中的传递性与非传递性依赖
💡
原文英文,约500词,阅读约需2分钟。
📝
内容提要
本文讨论了构建系统中的传递性和非传递性依赖,以及它们在CMake和Bazel中的应用。CMake有三种依赖类型,而Bazel只有传递性依赖。然而,Bazel允许用户定义自定义构建规则来实现不同类型的依赖。良好管理依赖接口可以提高构建的可靠性。
🎯
关键要点
- 依赖性是描述不同实体之间关系的概念,尤其在构建系统中用于描述构建目标之间的关系。
- 依赖性分为传递性依赖和非传递性依赖。
- 传递性依赖允许接口的传播,而非传递性依赖则阻止接口的传播。
- CMake中有三种依赖类型:PUBLIC、PRIVATE和INTERFACE,PUBLIC和INTERFACE相当于传递性依赖,PRIVATE相当于非传递性依赖。
- Bazel只有传递性依赖的概念,使用deps关键字声明依赖,无法防止不必要的接口传播。
- Bazel允许用户定义自定义构建规则,以实现传递性和非传递性依赖的管理,从而提高构建的可靠性。
➡️