迁移至Bazel Modules后,如何处理非Bazel外部依赖?
解决Bazel Modules中非Bazel第三方依赖的引入问题
针对你从Bazel Workspace迁移到Bazel Modules时遇到的非Bazel依赖(如STM32的CMSIS设备库和HAL驱动)处理问题,直接在MODULE.bazel中沿用类似http_archive的声明方式即可,具体操作如下:
步骤1:在MODULE.bazel中声明远程依赖
将原WORKSPACE中的http_archive块直接迁移到MODULE.bazel文件的顶级位置(无需嵌套在module()块内),示例代码如下:
http_archive( name = "cmsis_device_g0", url = "https://github.com/STMicroelectronics/cmsis_device_g0/archive/refs/tags/v1.4.4.zip", strip_prefix = "cmsis-device-g0-1.4.4", sha256 = "c60d9f8478f356db0461d797d573d82baebe62695acea5944128f242a7a71fc6", build_file = "//thirdparty/stm32:stm32_cmsis_device.BUILD", ) http_archive( name = "stm32g0xx_hal_driver", url = "https://github.com/STMicroelectronics/stm32g0xx_hal_driver/archive/refs/tags/v1.4.6.zip", strip_prefix = "stm32g0xx-hal-driver-1.4.6", sha256 = "1098b8b816047063bed5fb3abfc2e5a15e16d6696a279b59b9a0be5d850d2f09", build_file = "//thirdparty/stm32:stm32_hal_driver.BUILD", )
步骤2:确保自定义BUILD文件路径有效
原有的build_file路径//thirdparty/stm32:...保持不变,只要对应的自定义BUILD文件(stm32_cmsis_device.BUILD、stm32_hal_driver.BUILD)仍存在于项目的thirdparty/stm32目录下,Bazel就能正确识别并构建这些非Bazel依赖。
步骤3:验证依赖引用
在项目的BUILD文件中,依然可以通过@cmsis_device_g0、@stm32g0xx_hal_driver的标签来引用这些依赖,和Workspaces模式下的用法完全一致。
补充说明
如果后续发现这些依赖有对应的官方或社区维护的Bazel模块,也可以改用bazel_dep来简化声明,但对于无Bazel模块的第三方库,http_archive是最直接的兼容方案,Bazel 6.5.x的Modules模式完全支持这种写法。
内容的提问来源于stack exchange,提问作者johan zwarteveld
相关产品推荐
相关产品推荐

