上文我们在同一个package中创建了多个targets,这回咱们再增加一点点难度,代码还是放在同一个repository中,但是分属于不同的package,目录结构如下 mybazel3这个repository有两个文件夹,lib和main,它们各有一个BUILD,这样我们有了两个package,libBUILD内容如下load(rulescccc:defs。bzl,cclibrary)cclibrary(namehelloworldlib,srcs〔helloworld。cc〕,hdrs〔helloworld。h〕,visibility〔visibility:public〕,) 这次helloworldlib这个target多了一个参数,visibility,它的作用是指定这个target在外面的可见性。细心的朋友也许还记得上个例子中并没有指定这个参数,没错。那是因为Bazel中缺省在同一个package中的各个targets之间互相是可见的。我们这里设置为public,让它对所有target都是可见的,当然你也可以让它对某个特定的repository,或者特定的package,或者特定的target可见。 libhelloworld。hpragmaonceincludestringstd::stringhelloworld(); libhelloworld。ccincludehelloworld。hstd::stringhelloworld(){returnHello,world!;} mainBUILDload(rulescccc:defs。bzl,ccbinary)ccbinary(namehelloworldmain,srcs〔helloworldmain。cc〕,deps〔lib:helloworldlib,〕,) mainhelloworldmain。ccincludelibhelloworld。hincludeiostreamintmain(){std::couthelloworld()std::return0;} 最后直接运行:bazelrunmain:helloworldmain 能在同一个repository干的事就这些了,后面我们看看外面的精彩世界。 源码获取:gitgithub。com:zhouxindongbazellearning。git