Bazel: 2. 文件系统

和ROS一样bazel也有自己的文件系统:

参考网址 - https://docs.bazel.build/versions/master/tutorial/cpp.html

参考代码 - https://github.com/bazelbuild/examples/

所有的Bazel构建都是在一个工作空间的,它是文件系统中一个保存全部源代码的目录,同时还将包含一些构建后的输出目录的符号链接(例如:bazel-bin 和 bazel-out 等输出目录),工作区目录可以随意放在哪里,但是工作区的根目录必须包含一个名为 WORKSPACE 的工作区配置文件。工作区配置文件可以是一个空文件当Bazel构建项目时,所有输入和依赖项必须在同一个工作空间中,驻留在不同工作空间中的文件彼此独立。也可以包含引用外部构建输出所需的依赖关系。在example中的bazel的文件结构如下:

examples
└── cpp-tutorial
    ├──stage1
    │  └── main
    │      ├── BUILD
    │      ├── hello-world.cc
    │  └── WORKSPACE
    ├──stage2
    │  ├── main
    │  │   ├── BUILD
    │  │   ├── hello-world.cc
    │  │   ├── hello-greet.cc
    │  │   ├── hello-greet.h
    │  └── WORKSPACE
    └──stage3
           ├── main
       │   ├── BUILD
       │   ├── hello-world.cc
       │   ├── hello-greet.cc
       │   └── hello-greet.h
       ├── lib
       │   ├── BUILD
       │   ├── hello-time.cc
       │   └── hello-time.h
       └── WORKSPACE

其中stage1 stage2 stage3分别表示3个工作空间。

了解BUILD文件

BUILD文件包含Bazel的几种不同类型的说明。 最重要的类型是构建规则,它告诉Bazel如何构建所需的输出,如可执行二进制文件或库。 BUILD文件中的构建规则的每个实例都称为目标,并指向一组特定的源文件和依赖关系。 目标也可以指向其他目标。

看看cpp-tutorial / stage1 / main目录下的BUILD文件:  

cc_binary(
    name = "hello-world",
    srcs = ["hello-world.cc"],
)

在我们的例子中,hello-world目标实例化了Bazel的内置cc_binary规则。 该规则告诉Bazel从没有依赖关系的hello-world.cc源文件构建一个自包含的可执行二进制文件。

目标中的属性显式声明其依赖关系和选项。 虽然name属性是必需的,但很多是可选的。 例如,在hello-greet目标中,name是不言自明的,srcs指定Bazel构建目标的源文件。


你可能感兴趣的:(Bazel)