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_file
或build_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
中,它都会起作用。
我刚刚开始学习如何使用 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_file
或build_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
中,它都会起作用。