Bazel - 5(Hello, world示例3,多个package)

上文我们在同一个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-05-30

标签:上文   示例   文件夹   源码   细心   难度   例子   作用   参数   两个   结构

1 2 3 4 5

上滑加载更多 ↓
推荐阅读:
友情链接:
更多:

本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828  

© CopyRight 2020-2024 All Rights Reserved. Powered By 71396.com 闽ICP备11008920号-4
闽公网安备35020302034903号

Top