代码之家  ›  专栏  ›  技术社区  ›  CleanCoder265

使用bazel拉Github存储库

  •  1
  • CleanCoder265  · 技术社区  · 6 年前

    我需要使用 Bazel . 因为我是这个工具的新手,所以我不确定如何实现它。

    我的主要想法是:

    在中写入自定义存储库规则 下载githubrepo.bzl (与工作区文件一样位于项目根目录中)例如:

    def _impl(repository_ctx):
        repository_ctx.download("url_to_zipped_github_repo", output='relative_path_to_output_file')
    
    github = repository_rule(
        implementation = _impl
    

    而且在 工作区 要写入的文件如下:

    load("//:downloadgithubrepo.bzl", "github")
    

    调用一个构建 建造 需要文件(也位于项目根目录下) 其内容如下:

    cc_library(
        name = "testrun",
        srcs = "main.c",
    )
    

    我必须添加main.c文件,否则构建会失败——这是一个问题,而真正的问题是,这不起作用,因为构建正在通过,但Github存储库没有下载。

    我走对了吗?以前有人做过这样的事吗?

    1 回复  |  直到 6 年前
        1
  •  5
  •   Jin    6 年前

    您正在查看的内容可能已经在 new_git_repository 存储库规则,或 git_repository 如果Github项目已经有bazel,则为规则 BUILD 文件已连接。

    如果Github项目 有生成文件,使用时需要生成文件 新的Git存储库 . 例如,如果要依赖 file target (e.g. /foo/bar.txt ) or rule target (e.g. a cc_library ) 在里面 https://github.com/example/repository 以及存储库 没有 有生成文件,在项目的 WORKSPACE 文件:

    new_git_repository(
        name = "example_repository",
        remote = "https://github.com/example/repository.git",
        build_file_content = """
    exports_files(["foo/bar.txt"])
    
    # you can also create targets
    cc_library(
        name = "remote_cc_library",
        srcs = ["..."],
        hdrs = ["..."],
    """,
    )
    

    在你的 文件,使用 @ 前缀:

    cc_library(
        name = "testrun",
        srcs = ["main.c"],
        data = ["@example_repository//:foo/bar.txt"],
        deps = ["@example_repository//:remote_cc_library"],
    )
    

    当你跑步时 bazel build //:testrun 巴泽尔会……

    1. 分析 //:testrun ,其中包括文件 main.c 以及外部存储库中的目标 @example_repository
    2. 查找名为的外部存储库的工作区文件 example_repository 然后发现 新的Git存储库 宣言。
    3. 执行 git clone remote 中指定的属性 示例\存储库 宣言。
    4. 写入包含 build_file_content 克隆存储库的项目根目录下的字符串。
    5. 分析目标 @example_repository//:foo/bar.txt @example_repository//:remote_cc_library
    6. 建立依赖关系,并将它们交给 //:测试运行 抄送库 .
    7. 建造 //:测试运行

    如果github项目 确实有 生成文件,不需要提供生成文件。在指定工作区依赖项之后,可以直接引用目标 Git_存储库 :

    git_repository(
        name = "example_repository",
        remote = "https://github.com/example/repository.git",
    )
    

    有关更多信息,请查看Bazel的文档 External Repositories