bazel小总结

最近在用Utube-8M的mediapipe框架提取视频特征,用到了bazel编译,遇到一些问题做一些总结。

WORKSPACE

WORKSPACE位于你的项目根目录,标志你的工作区。用于引入外部依赖关系,通常是源代码位于主存储库之外。

BUILD文件

BUILD文件给出了编译目标的规则,包括target名称,源文件srcs,头文件hdrs,依赖deps

cc_binary(
    name = "hello-world",
    srcs = ["hello-world.cc"],
    hdrs = ["hello-world.hpp",
				 "helo.hpp",
	       ],
	 deps = ["//lib:hello-time"]
)

具体规则可以参考源网站https://docs.bazel.build/versions/master/be/c-cpp.html#cc_binary

deps

依赖可以包含内部依赖也可以包含外部依赖,
内部依赖这里的路径是以WORKSPACE的路径开始的相对路径,例如deps = ["//lib:hello-time"]代表WORKSPACE路径下有lib文件夹,lib里面有hello-time.cc,并且有BUILD文件,这个就是内部依赖,还没有编译,在你编译主文件时他会自动链接先编译这个文件。

外部依赖就是可以调用你安装好的包,比如opencv包,这时你需要先改WORKSPACE加入环境,再写一个BUILD调用。
1、WORKSPACE加入环境,它指定了名字,path就是环境遍历,build_file就是build的文件再third_party文件夹下opencv_linux.BUILD中。

new_local_repository(
    name = "linux_opencv",
    build_file = "@//third_party:opencv_linux.BUILD",
    path = "/home/menglingjun/menglingjun/software/opencv",
)

2、改opencv_linux.BUILD
加入源文件,头文件,include啥的,都是相对于你前面的path

cc_library(
    name = "opencv",
    srcs = glob(
        [
             "lib64/libopencv_core.so",
             "lib64/libopencv_highgui.so",
             "lib64/libopencv_imgcodecs.so",
             "lib64/libopencv_imgproc.so",
             "lib64/libopencv_video.so",
             "lib64/libopencv_videoio.so",
        ],
    ),
    hdrs = glob(
         [
              "include/opencv4/opencv2/**/*.h*",
              "include/opencv4/opencv2/*.h*",
         ]),
    includes = ["include/opencv4",], # ["include"],
    linkstatic = 1,
    visibility = ["//visibility:public"],
)

3、你要编译的目标如何依赖
把opencv加上就可以了。

cc_binary(
    name = "hello-world",
    srcs = ["hello-world.cc"],
    hdrs = ["hello-world.hpp",
				 "helo.hpp",
	       ],
	 deps = ["//third_party:opencv"]
)

编译文件

Test 1编译单独一个目标

在你的WORKSPACE所在目录下运行bazel build,运行main文件夹下的hello-world.cc
stage1
├── main
│ ├── BUILD
│ └── hello-world.cc
└── WORKSPACE

bazel build //main:hello-world

Test 2编译带有依赖的目标

如果hello-world.cc的文件需要调用hello-greet的包此时就需要加入deps依赖。build文件如下所示

cc_library(
    name = "hello-greet",
    srcs = ["hello-greet.cc"],
    hdrs = ["hello-greet.h"],
)

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

这样再编译hello-world,bazel就会首先编译hello-greet再对hello-world.cc进行编译。指令我们还是一样

bazel build //main:hello-world
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值