bazel 项目在哪里存储它的“.so”文件?

Where does bazel project store its ".so" files?

我有一个非常简单的 bazel 项目,它构建了一个库和一个二进制文件,如下所示:

cc_binary(
    name = "hello-world",
    srcs = ["hello-world.cc"],
    deps = [":hello-greet"],
)
cc_library(
    name = "hello-greet",
    srcs = ["hello-greet.cc"],
    hdrs = ["hello-greet.h"],
)

是的,它适用于我的 ubuntu 盒子:

# cat hello-greet.cc
#include<stdio.h>
void f(){
    printf("f function\n");
}
# cat hello-world.cc
#include<stdio.h>
#include"hello-greet.h"
int main(){
    f();
    printf("%s \n", "abc");
    return 0;
}

"bazel build hello-world && bazel run hello-world" 将打印:

f function
abc

好的,好的。但是我找不到我的 libhello-greet.so 在哪里,它存储在哪里?我在当前目录下找不到它。

非常感谢。

Bazel 将源代码树视为只读并将其输出放在单独的输出目录中。官方找到这个目录的方法是运行bazel info output_base。但是,为方便起见,Bazel 还在工作区根目录中创建了一个指向名为 bazel-out 的目录的符号链接。

在您的特定情况下,实际创建的 hello-greet 共享库可能有也可能没有——完全有可能在不创建中间共享对象的情况下构建二进制文件。 bazel build //:hello-greet 应该构建并显示 hello-greet 的共享对象的路径。

它表示 bazel build 输出的位置。通常在 bazel-bin/... 中,遵循与源文件相同的目录结构。