bazel使用的一点感受

最近在项目中用到了bazel,这里记录下使用过程中的一些心得

bazel编译是通过识别当前目录下BUILD或者BUILD.bazel文件,大概长这样:

点击查看代码
package(default_visibility = ["//visibility:public"])

sh_binary(
    name = "bootstrap_sh",
    srcs = ["bootstrap.sh"],
    data = [
        "//tools/linux/scripts:start_base.sh",
        "//system/linux/scripts:monitor_sh",
        "//scripts:module_manager_sh",
    ],
)

py_binary(
    name = "config_downloader_py",
    srcs = [
        "config_downloader.py",
    ],
    data = [
        "//config/system:config_mgmt",
    ],
    main = "config_downloader.py",
    deps = [
        "//base/file/py:path",
    ],
)

py_test(
    name = "config_downloader_test",
    srcs = [
        "config_downloader.py",
        "config_downloader_test.py",
    ],
    deps = [
        ":config_downloader_py",
        "//base/file/py:path",
    ],
)

一个BUILD对应一有个package,也就是包的说法,然后它可能有父包、子包,如果一个目录不包含BUILD或BUILD.bazel文件,则它只是一个纯粹的目录,隶属于最近的父包(包含BUILD或BUILD.bazel文件)。

这里面sh_binary对应shell脚本的package,py_binary对应python文件的package,py_test对应python的测试文件package,还有很多其他类型,像cc_binary,cc_library

name字段对应想生成的package名字
srcs表示源文件
deps表示源文件用到了哪些依赖的package
data表示运行package时可能需要用到的一些数据文件,比如运行测试package时需要用到的数据文件

运行命令:
bazel build xxx/xxx/path
bazel run xxx/xxx:package_name
bazel test //scripts:config_downloader_test --sandbox_writable_path=/opt

因为bazel运行时一般是在沙箱中进行,会隔离本机环境,在沙箱中默认对本机环境的文件是只有可读权限的,如果需要写权限,可以通过--sandbox_writable_path参数指定,指定一个目录为可写目录,对该目录下所有子目录也是拥有读写权限的

posted @ 2023-06-14 10:52  LuckyOven  阅读(388)  评论(0)    收藏  举报