首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Bazel:如何获得我在bazel测试中构建的二进制文件的路径?

Bazel:如何获得我在bazel测试中构建的二进制文件的路径?
EN

Stack Overflow用户
提问于 2022-02-15 02:20:53
回答 1查看 960关注 0票数 1

我在和bazel一起写个go测试。测试将首先构建一个二进制文件,并将二进制文件挂载到一个坞容器中。所以我需要知道我构建的二进制程序的路径。

文件系统结构如下:

dir结构如下所示:

代码语言:javascript
复制
    some/of/my/path
    ├── BUILD.bazel
    ├── my_test.go
    └── my_tool
        ├── BUILD.bazel
        └── my_tool.go

在这里,我想在my_tool dir上构建一个包含go文件的go二进制文件。

我上一个问题的答案中,我了解到可以使用in go_test From some/of/my/path/BUILD.bazeldata条目来构建二进制文件:

代码语言:javascript
复制
go_test(
    name = "my_test",
    srcs = ["my_test.go"],
    data = glob(["testdata/**"]) + [
        "//some/of/my/path/my_tool:my_tool",
    ],
    gotags = ["my_test"],
    deps = [
        "//pkg/util/contextutil",
        "//pkg/util/log",
    ...
    ],
)

它为my_tool构建了go二进制文件。但现在的问题是,我如何知道my_toolmy_test.go中构建的二进制文件

my_test.go中,我需要这样写:

代码语言:javascript
复制
package my_lucky_test

...

pathForMyTool := some_path
hostConfig := container.HostConfig{
Binds := []string {""%s/my_tool-bin:/workding-dir/my_tool-bin", pathForMyTool"}
}

我的问题是,我如何才能得到“我的工具-宾”的绝对路径?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-02-15 10:42:01

简单地跑;

代码语言:javascript
复制
bazel build //some/of/my/path:my_test

它应该打印出二进制到stdout的路径。

作为当前方法的另一种选择,我建议您使用图像,这是一种用于构建容器的Bazel感知方法。

编辑: OP已经澄清了这个问题,尽管我会把原来的答案留在上面,因为其他人可能会觉得它很有用。

当您将二进制/测试与某些数据捆绑在一起时,data属性下的文件就变成了一组“runfiles”。在每种语言中都有用于解析runfile的各种库。对于golang,您需要使用rules_go中的rules_go来解析您的运行文件。例如:

代码语言:javascript
复制
go_test(
    name = "my_test",
    srcs = ["my_test.go"],
    data = glob(["testdata/**"]) + [
        "//some/of/my/path/my_tool:my_tool",
    ],
    gotags = ["my_test"],
    deps = [
        "//pkg/util/contextutil",
        "//pkg/util/log",
        # NEW dep
        "@rules_go//rules_go/go/tools/bazel",
    ...
    ],
)

你的my_test.go

代码语言:javascript
复制
package my_lucky_test

# NEW
import(
    "github.com/bazelbuild/rules_go/go/tools/bazel"
)

#...

pathForMyTool, ok := bazel.FindBinary("some/of/my/path/my_tool", "my_tool")
if !ok {
    # Error handling
}
hostConfig := container.HostConfig{
    Binds := []string {""%s/my_tool-bin:/workding-dir/my_tool-bin", pathForMyTool}
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71120426

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档