bazel的使用

2023-11-18

bazel的使用

bazel是google开源的构建工具,可以支持多种语言的构建。这里来尝试一下如何在C++项目中使用bazel构建。

安装就不介绍了,在官网很详细,输入bazel --help

Usage: bazel <command> <options> ...

Available commands:
analyze-profile     Analyzes build profile data.
build               Builds the specified targets.
canonicalize-flags  Canonicalizes a list of bazel options.
clean               Removes output files and optionally stops the server.
coverage            Generates code coverage report for specified test targets.
dump                Dumps the internal state of the bazel server process.
fetch               Fetches external repositories that are prerequisites to the targets.
help                Prints help for commands, or the index.
info                Displays runtime info about the bazel server.
license             Prints the license of this software.
mobile-install      Installs targets to mobile devices.
query               Executes a dependency graph query.
run                 Runs the specified target.
shutdown            Stops the bazel server.
test                Builds and runs the specified test targets.
version             Prints version information for bazel.

看上去和maven差不太多,以一个实际项目来介绍一下基本命令的使用。

bazel build
在目录下建立test文件夹和WORKSPACE,并在test下创建两个文件,分别如下:

├── test
│   ├── BUILD
│   └── test.cc
└── WORKSPACE

内容如下:

BUILD:

package(default_visibility = ["//visibility:public"])

cc_binary(
    name = "test",
    srcs = [
        "test.cc",
    ],
)

WORKSPACE为空

test.cc:

#include <iostream>

int main() 
{
    printf("test \n");

    return 0;
}

其中:WORKSPACE和BUILD是bazel项目必须的文件,test.cc是我们自己定义的c++文件,.cc后缀是unix系统的后缀,.cpp是非unix系统。

构建项目
在test/目录下执行以下命令可以编译c++文件:

bazel build [target]

本例中:

bazel build test/...

注意是3个点!

编译成功的结果:

art@art:~/test$ bazel build test/...
INFO: Analyzed target //test:test (0 packages loaded, 0 targets configured).
INFO: Found 1 target...
Target //test:test up-to-date:
  bazel-bin/test/test
INFO: Elapsed time: 0.659s, Critical Path: 0.45s
INFO: 2 processes: 2 linux-sandbox.
INFO: Build completed successfully, 3 total actions


art@art:~/test$ ./bazel-bin/test/test
test 


目录结果变为:

art@art:~/test$ tree
.
├── bazel-bin -> /home/art/.cache/bazel/_bazel_art/2c6e9f0f22570755ccf79d29dc14971b/execroot/__main__/bazel-out/k8-fastbuild/bin
├── bazel-out -> /home/art/.cache/bazel/_bazel_art/2c6e9f0f22570755ccf79d29dc14971b/execroot/__main__/bazel-out
├── bazel-test -> /home/art/.cache/bazel/_bazel_art/2c6e9f0f22570755ccf79d29dc14971b/execroot/__main__
├── bazel-testlogs -> /home/art/.cache/bazel/_bazel_art/2c6e9f0f22570755ccf79d29dc14971b/execroot/__main__/bazel-out/k8-fastbuild/testlogs
├── test
│   ├── BUILD
│   └── test.cc
└── WORKSPACE

5 directories, 3 files

bazel-bin/test/test.runfiles/main/test目录下有二进制文件,运行:

art@art:~/test/bazel-bin/test/test.runfiles/__main__/test$ ls
test

$ ./test
test

至此bazel编译成功!

qita jieshao :

bazel run

bazel build用来编译cpp为二进制文件,除此之外还可以直接运行cpp文件中的main函数。

bazel query

用来查看依赖树。

bazel test

类似mvn test,运行代码中的单测。

bazel clean

清除编译的结果,类似mvn clean。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

bazel的使用 的相关文章

随机推荐

  • Vue与WebGL结合

    本文将WebGL与当前前端比较火的Vue框架进行初步结合 以备后续项目开发需要 部分代码源自https blog csdn net GISuuser article details 82224057以及 WebGL编程指南 大家可以自己百度
  • 使用IDEA创建springboot项目时,出现错误Cannot download ‘https://start.spring.io‘: connect timed out

    使用IDEA创建springboot项目时 出现错误Cannot download https start spring io connect timed out 解决方案 1 选择 custom 并使用阿里云 https start al
  • Objective-C Runtime 1小时入门教程

    原文出处 ian ianisme 一 前言 如果你没有Objective C基础 请学习了基础的iOS开发再来 这个1小时是给有一定iOS基础的童鞋的 如果你是大牛或者你感觉Objective C Runtime太简单不用1小时学习的 也请
  • MVVM框架极简总结

    MVVM是一个前端框架 由model view viewmodel组成 是MVC的升级版 变成了由viewmodel进行m和v之间的双向数据绑定 虽然代码量相较于MVC变得更多了一点 逻辑和视图分开来写 但是更利于代码解耦 也更方便测试来自
  • 刷脸支付互联网思维的推广让传播变得更快

    行业巨头也在加速抢占刷脸支付的风口 支付宝近期发布了新的刷脸支付设备 同时宣布补贴力度不设上限 以此来加速刷脸支付的落地 在巨头们的大力推动下 刷脸支付普及率不断提升 最新数据显示 目前我国刷脸支付用户数已经破亿 其中 90后 占据了主流
  • Qt之软键盘的实现

    文章目录 前言 一 基于中文汉字数据库 1 核心代码 2 效果 二 基于谷歌拼音输入引擎 1 核心代码 2 效果 前言 Qt5 8版本开始推出了基于QML实现的软键盘功能 在此之前 并没有官方版本的软键盘 本篇主要介绍Qt实现软键盘的两种方
  • conda创建虚拟环境 python版本不对_如何在conda虚拟环境中指定python版本

    我在新的职位上负责一个工作项目 我相信虚拟环境是在它里面创造的 正如我所见 head bm3 py usr bin env opt bm3 venv bin python3 bm3 venv是使用requirements txt 使用vir
  • 数据库分库分表中间件 Sharding-JDBC 源码分析 —— SQL 路由(二)之分库分表路由

    关注微信公众号 芋道源码 有福利 1 RocketMQ MyCAT Sharding JDBC 所有源码分析文章列表 2 RocketMQ MyCAT Sharding JDBC 中文注释源码 GitHub 地址 3 您对于源码的疑问每条留
  • c++学习之pair对组创建

    功能描述 成对出现的数据 利用队组可以反回两个数据 函数原型 pair
  • C# 项目没有.sln文件的解决办法:

    什么是sln文件 sln文件开发中使用的解决方案文件 使用解决方案文件 后缀为sln的文件 表示一个项目组 他通常包含一个项目中所有的工程文件信息 包括文件版本 工程信息 全局设置 通过打开sln文件就可以加载整个项目 但是我新建的一个项目
  • Win11总是出现BitLocker恢复,想要彻底关闭它该如何操作?

    win11解除bitlocker加密方法一 1 首先按下键盘 Win R 打开运行 如图所示 2 打开运行后 在其中输入 control 并点击 确定 打开控制面板 如图所示 3 打开后 进入 bitlocker驱动器加密 如图所示 4 随
  • 【计算机视觉

    文章目录 一 ResNeSt 二 ShuffleNet v2 三 FBNet 四 Inception v4 五 ResNet D 六 MetaFormer 七 PyramidNet 八 RevNet 九 Convolutional Visi
  • Shell脚本运行中的停止方法

    Linux系统Shell中提交了一个脚本 但是需要停止这个进程 如何处理 方式1 killall file flume kafka 说明 killall是一个命令 不是kill all file flume kafka是脚本名 此方法简单粗
  • C++ 发送http太慢导致数据积压问题分析(Linux)

    问题现象 程序接收数据 对数据进行简单地处理 处理完之后发送到其他平台 程序在接收到数据到在其他平台上面显示时间差了将近一个小时 存放要发送到其他平台的数据的容器积压了大概一百五十多万条的数据 问题排查过程 1 接收数据与发送数据到其他平台
  • 列出所有共享的文件夹权限或 NTFS 权限 (PowerShell)

    列出所有共享的文件夹权限或 NTFS 权限 PowerShell 此 PowerShell 脚本说明如何列出所有共享的文件夹权限或 NTFS 权限 下载 ListAllSharedFolderPermission zip 出所有共享的文件夹
  • HTML5网页设计常用标记-链接标记和列表标记

    链接标记 在HTML语言中 利用 a 标记在网页中创建超链接 语法格式 a href 跳转目标 target self 文本或图像 a 文字设置为超链接后 默认显示为加下划线的蓝色字体 图片设置为超链接后 会自动加一个黑色的边框 a 标记常
  • 内存的堆分配和栈分配 & 字符数组,字符指针,Sizeof总结

    程序占用的内存分为几个部分 各个部分起什么作用 字符数组 字符指针在实现上有什么区别等等 本文对此做了详细阐述 特转载于此 供大家学习参考之用 一个由C C 编译的程序占用的内存分为以下几个部分 1 栈区 stack 由编译器自动分配释放
  • 数据驱动性能体验优化

    本专题共10篇内容 包含淘宝APP基础链路过去一年在用户体验数据科学领域 包括商详 物流 性能 消息 客服 旅程等 一些探索和实践经验 在商详页基于用户动线和VOC挖掘用户决策因子带来浏览体验提升 在物流侧洞察用户求助时间与实际物流停滞时长
  • Ceph Pool操作总结

    Ceph Pool操作总结 一个ceph集群可以有多个pool 每个pool是逻辑上的隔离单位 不同的pool可以有完全不一样的数据处理方式 比如Replica Size 副本数 Placement Groups CRUSH Rules 快
  • bazel的使用

    bazel的使用 bazel是google开源的构建工具 可以支持多种语言的构建 这里来尝试一下如何在C 项目中使用bazel构建 安装就不介绍了 在官网很详细 输入bazel help Usage bazel