Bazel项目构建

Bazel构建简单的C++程序

目录结构如下

实现简单的两个数相加,主函数输出两个数的和


├── libs
│   ├── add.cc
│   ├── add.h
│   └── BUILD
├── main
│   ├── BUILD
│   └── main.cc
└── WORKSPACE

文件说明

  • WORKSPACE :表明此文件所在的路径为项目的根,其它项目均可以以此根节点访问
  • main/BUILD:主函数的构建规则
  • main/main.cc:主函数源代码
  • libs/add.cc:库函数实现
  • libs/add.h:库函数头文件
  • libs/BUILD:库函数的编译规则
    其中,main.cc如下:

#include "add.h"
#include <iostream>
using namespace std;
int main(){
    int a = 10,b = 20;
    cout<<add(a,b)<<endl;
}

库函数add.cc实现:

#include "add.h"
int add(int a,int b){
    return a+b;
}

库函数头文件add.h

#pragma once
int add(int a,int b);

libs/BUILD:构建规则

cc_library(
    name = "addlib",# 此BUILD文件负责的任务的名称,这里主要为了编译库
    srcs = ["add.cc"],# 编译库需要的源文件
    hdrs = ["add.h"], # 编译库需要的头文件
    visibility=["//main:__pkg__"], # 编译库的任务名称需要对main目录可见,其才可以在BUILD中直接使用
)

main/BUILD

cc_binary(
    name = "main", # 此BUILD任务负责构建可执行文件,这里任务名称设置为main
    srcs = ["main.cc"],# 此任务构建需要的源代码
    deps = [
        "//libs:addlib",# 因为需要link库addlib,这里需要设置依赖,还需要在构建addlib的文件中设置visibility
    ],
    copts = ["-Ilibs"]# 设置头文件搜索路径,否则提示找不到add.h
)

编译构建代码:

bazel build //main:main

输出如下:

Auto-Configuration Warning: CC with -fuse-ld=gold returned 0, but its -v output didn't contain 'gold', falling back to the default linker.
INFO: Analyzed target //main:main (1 packages loaded, 4 targets configured).
INFO: Found 1 target...
Target //main:main up-to-date:
  bazel-bin/main/main
INFO: Elapsed time: 0.060s, Critical Path: 0.01s
INFO: 1 process: 1 internal.

执行编译后的二进制文件:

bazel-bin/main/main

生成依赖关系

bazel query --notool_deps --noimplicit_deps "deps(//main:main)" \       
  --output graph

输出如下:

DEBUG: /home/xxx/.cache/bazel/_bazel_liushuai/d9597acfdfdfac150b8fe6c31c69a265/external/bazel_tools/tools/cpp/lib_cc_configure.bzl:118:10: 
Auto-Configuration Warning: CC with -fuse-ld=gold returned 0, but its -v output didn't contain 'gold', falling back to the default linker.
digraph mygraph {
  node [shape=box];
  "//main:main"
  "//main:main" -> "//main:main.cc"
  "//main:main" -> "//libs:addlib"
  "//main:main.cc"
  "//libs:addlib"
  "//libs:addlib" -> "//libs:add.cc\n//libs:add.h"
  "//libs:add.cc\n//libs:add.h"
}

xdot绘制依赖关系图:sudo pacman -S xdot
xdot <(bazel query --notool_deps --noimplicit_deps "deps(//main:main)" \ --output graph)
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值