上文我们在同一个package中创建了多个targets,这回咱们再增加一点点难度,代码还是放在同一个repository中,但是分属于不同的package,目录结构如下
my-bazel3这个repository有两个文件夹,lib和main,它们各有一个BUILD,这样我们有了两个package,lib/BUILD内容如下
load("@rules_cc//cc:defs.bzl", "cc_library")
cc_library(
name = "hello-world-lib",
srcs = ["hello-world.cc"],
hdrs = ["hello-world.h"],
visibility = ["//visibility:public"],
)
这次hello-world-lib这个target多了一个参数,visibility,它的作用是指定这个target在外面的可见性。细心的朋友也许还记得上个例子中并没有指定这个参数,没错。那是因为Bazel中缺省在同一个package中的各个targets之间互相是可见的。我们这里设置为public,让它对所有target都是可见的,当然你也可以让它对某个特定的repository,或者特定的package,或者特定的target可见。
lib/hello-world.h
#pragma once
#include
std::string hello_world();
lib/hello-world.cc
#include "hello-world.h"
std::string hello_world() { return "Hello, world!"; }
main/BUILD
load("@rules_cc//cc:defs.bzl", "cc_binary")
cc_binary(
name = "hello-world-main",
srcs = ["hello-world-main.cc"],
deps = [
"//lib:hello-world-lib",
],
)
main/hello-world-main.cc
#include "lib/hello-world.h"
#include
int main() {
std::cout << hello_world() << std::endl;
return 0;
}
最后直接运行:bazel run //main:hello-world-main
能在同一个repository干的事就这些了,后面我们看看外面的精彩世界。
源码获取:git@github.com:zhouxindong/bazel-learning.git
页面更新:2024-03-13
本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828
© CopyRight 2008-2024 All Rights Reserved. Powered By bs178.com 闽ICP备11008920号-3
闽公网安备35020302034844号