簡體   English   中英

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

我不確定該怎么做的一件事是如何使用子模塊,例如我自己的倉庫。 我不使用 bazel 的地方。 回購協議只有一些我需要拉入的 c/h 文件。為了讓事情在本地工作,我在從子模塊拉入的文件夾中添加了一個 BUILD 文件。 但是,在我提交並推送我的更改后,BUILD 文件顯然不存在。 如何將子模塊文件夾中的 c/h 文件添加到我的構建中。 Bazel 似乎正在該目錄中尋找一個 BUILD 文件夾,但不會有,例如,如果其他人克隆了這個 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 文件。

因為它將在不同的外部存儲庫中,所以您需要通過相應的 label 訪問它。

例如,如果您將 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中,它都會起作用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM