简单介绍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
中。 其他的是一样的,我就不多介绍了,后面使用过程中有其他用法我再记录