Bazel:项目中的子模块不使用 bazel ,推送到 git 不包含子模块中本地添加的 BUILD 文件,我该如何构建?

Bazel: submodule in project does not use bazel , pushing to git doesnt include locally added BUILD file in submodule, how do i build?

我刚刚开始学习如何使用 bazel tutorial

我不确定该怎么做的一件事是如何使用子模块,例如我自己的仓库。我不使用 bazel 的地方。回购协议只有一些 c/h 文件需要拉入。为了让事情在本地工作,我在从子模块拉入的文件夹中添加了一个 BUILD 文件。但是,在我提交并推送我的更改后,BUILD 文件显然不存在。如何将子模块文件夹中的 c/h 文件添加到我的构建中。 Bazel 似乎正在该目录中寻找一个 BUILD 文件夹,并且会有 none,例如如果其他人克隆了这个 repo。

目前我的“主要”目录有这个构建文件:

cc_library(
  name = "uCShell-main",
  srcs = ["main.c"],
  deps = ["//uCShell:uCShell-lib" ],
)

cc_binary(
   name = "uCShell-bin",
   deps = [":uCShell-main" , "//uCShell:uCShell-lib" ]
)

并且带有拉入子模块的文件夹有这个本地添加的 BUILD 文件:

cc_library(
    name = "uCShell-lib",
    srcs = glob(["*.c"]),
    hdrs = glob(["*.h"]),
    visibility = ["//visibility:public"],
)

这可以正常工作和编译。但是,请纠正您在此处看到的 Bazel 的任何问题或误用,我想学习。 最后重申一下这个问题,当我推送这个项目时,本地添加的 BUILD 文件不会在项目中,因为它不在原始子模块中。那么如何在该子模块中包含 c/h 文件以构建我的 main.我想把它作为一个子模块。最终我可以为子模块的仓库添加一个 BUILD 文件,但我想找到一个更好的方法,例如,如果这不是我的仓库我可以添加一个 BUILD 文件怎么办。

如果使用new_local_repository相对路径导入子模块,可以设置build_filebuild_file_content添加BUILD文件。您应该能够使用相同的 BUILD 文件 as-is.

因为它会在不同的地方external repository,你需要通过相应的标签访问它。

例如,如果您将 BUILD 文件放在 build/BUILD.my_lib.bazel 并将其放在 WORKSPACE 中:

new_local_repository(
    name = "my_lib",
    path = "submodules/my_lib",
    build_file = "@//build:BUILD.my_lib.bazel",
)

然后你可以将 @my_lib//:uCShell-lib 放在任何其他目标的 deps 中,它都会起作用。