Bootstrap

简单介绍bazel的使用方法

简单介绍bazel的使用方法

我这里主要来介绍c++的使用,因为我本身就是学c++的,学他主要是因为当时有个项目需要使用bazel,因此我来学一下,顺便记录一下,我只简单介绍使用方法

安装配置bazel的环境

这里我使用的是bazle8.0的版本,首先我们下载这个可执行文件,如下命令

wget https://github.com/bazelbuild/bazel/releases/download/8.0.0/bazel-8.0.0-linux-x86_64
mv bazel-8.0.0-linux-x86_64 bazel
chmod +x bazel

然后设置环境变量,这里设置到~/.bashrc中,export PATH=$PATH://path/,这样bazel就安装完成了,下面我们简单介绍下如何使用这个c++的包管理器

bazel的使用

这里我们介绍一个第三方库的使用,其他的是一样的,项目的目录结构如下

(base) mr4@mr4-Lenovo-B51-80:~/a$ tree
.
├── main
│   ├── BUILD
│   └── main.cc
├── MODULE.bazel
└── test
    ├── BUILD
    └── main.cc

2 directories, 5 files

项目的根目录有个MODULE.bazle这个就是项目所需要用到的第三方库的配置文件,因为我们的项目需要用到gtest, fmt ,因此是文件内容如下

bazel_dep(name = "fmt", version = "11.1.1")
bazel_dep(name = "googletest", version = "1.15.2")

这里可以在网站 [https://registry.bazel.build/] 检索用到的库bazel是否支持,如果支持就直接按照上述的语法加到MODULE.bazle即可,这个文件是必须的

然后是两个文件夹了,main test,分别使用fmt gtest两个库,我们先看main中的代码

main/main.cc

#include <iostream>
#include <fmt/core.h>

int main(int, char **)
{
    std::cout << "Hello, from bazel!\n";
}

这里直接使用fmt库,然后BUILD文件包含了编译规则和依赖,内容如下,其中@fmt//:fmt是引用的第三方库,因为main只用到了fmt,因此就写一个就行了

cc_binary(
    name = "main",
    srcs = ["main.cc"],
    deps = [
        "@fmt//:fmt",  # 引用 fmt 库
    ],
)

下面就是编译项目了,首先要处于项目根目录下,然后执行如下命令

bazel build //main:main

这样就开始编译了,第一次时间比较久,因为要拉取一些依赖,后面再编译时间就短了,编译完成显示如下内容

(base) mr4@mr4-Lenovo-B51-80:~/a$ bazel8 build //main:main
Starting local Bazel server and connecting to it...
WARNING: Couldn't auto load rules or symbols, because no dependency on module/repository 'rules_android' found. This will result in a failure if there's a reference to those rules or symbols.
INFO: Analyzed target //main:main (70 packages loaded, 490 targets configured).
INFO: Found 1 target...
Target //main:main up-to-date:
  bazel-bin/main/main
INFO: Elapsed time: 16.071s, Critical Path: 1.92s
INFO: 22 processes: 18 internal, 4 linux-sandbox.
INFO: Build completed successfully, 22 total actions

然后目录结构会增加四个文件夹,如下

(base) mr4@mr4-Lenovo-B51-80:~/a$ tree
.
├── bazel-a -> /home/mr4/.cache/bazel/_bazel_mr4/258987d585aa15a6102bd09bd91ee809/execroot/_main
├── bazel-bin -> /home/mr4/.cache/bazel/_bazel_mr4/258987d585aa15a6102bd09bd91ee809/execroot/_main/bazel-out/k8-fastbuild/bin
├── bazel-out -> /home/mr4/.cache/bazel/_bazel_mr4/258987d585aa15a6102bd09bd91ee809/execroot/_main/bazel-out
├── bazel-testlogs -> /home/mr4/.cache/bazel/_bazel_mr4/258987d585aa15a6102bd09bd91ee809/execroot/_main/bazel-out/k8-fastbuild/testlogs
├── main
│   ├── BUILD
│   └── main.cc
├── MODULE.bazel
├── MODULE.bazel.lock
└── test
    ├── BUILD
    └── main.cc

6 directories, 6 files

编译好的可执行文件在bazel-bin中。 其他的是一样的,我就不多介绍了,后面使用过程中有其他用法我再记录

;