bazel使用学习杂记
bazel使用:https://blog.gmem.cc/bazel-study-note
BUILD 文件中for用法示例
[cc_library(
name = “libopencv_” + arch,
srcs = [OPENCVANDROIDSDK_NATIVELIBS_PATH + arch + “/” + OPENCV_LIBRARY_NAME],
hdrs = glob([
OPENCVANDROIDSDK_JNI_PATH + “include//*.h",
OPENCVANDROIDSDK_JNI_PATH + "include//*.hpp”,
]),
includes = [
OPENCVANDROIDSDK_JNI_PATH + “include”,
],
visibility = ["//visibility:public"],
alwayslink = 1,
) for arch in [
“arm64-v8a”,
“armeabi-v7a”,
“x86”,
“x86_64”,
]]
cc_library copts用来给加编译选项,常见的有加头文件搜索目录:
[workspace]/
WORKSPACE
third_party/
some_lib/
include/
some_lib.h
BUILD
some_lib.cc
Bazel希望用third_party/some_lib/include/some_lib.h方式包含some_lib.h,但是some_lib.cc可能跟希望用"include/some_lib.h"(为什么不能直接用此方式?)方式包含。为了使得包含路径有效,需要在third_party/some_lib/BUILD文件中将some_lib/目录添加到头文件包含路径的搜索列表中:
cc_library(
name = “some_lib”,
srcs = [“some_lib.cc”],
hdrs = [“some_lib.h”],
copts = ["-Ithird_party/some_lib"],
)
Bazel 中子层目录b需要包含上层目录a的头文件,则需要将a添加到b的依赖
参考文章https://www.jianshu.com/p/c2f6acd74731
Bazel将头文件放到一个目录下,用BUILD打包Target,其他源文件引用这些头文件统一依赖这个Target
cc_library(
name = “facedetection_post”,
srcs = [
“BaseAnchorGenerator.h”,
“Common.h”,
“GeneralFunc.h”,
],
hdrs = [“GeneralFunc.h”],
)
deps = ["//src/face/facedetection:facedetection_post",
],
测试demo - 目录结构如下
├── WORKSPACE
├── a
│ ├── BUILD
│ ├── a.cc
│ └── a.h
├── b
│ ├── BUILD
│ ├── b.cc
│ └── b.h
a打包成库
cc_library(name = "a",srcs = ["a.cc"],hdrs = ["a.h"],
)
b打包成可执行文件,依赖库a及头文件a
cc_binary(name = "b",srcs = ["b.cc","b.h"],copts = ["-Ia"], #此处是为了在b.h中直接#include "a.h" ,去掉这个选项,则b.h引用头文件a需要写成#include "a/a.h"deps = ["//a"],
)
如果想把所有头文件放到一个上层目录,如下所示,可以编写BUILD如下
├── WORKSPACE
├── a
│ ├── BUILD
│ └── a.cc
├── b
│ ├── BUILD
│ └── b.cc
└── header├── BUILD├── a.h└── b.h
cc_library(name = "header",srcs = [],#hdrs = ["a.h", "b.h"],hdrs = glob(["**/*.h","**/*.hpp"]),# copts =["-Iheader"],visibility = ["//visibility:public"],
)cc_library(name = "a",srcs = ["a.cc"],#hdrs = ["//header:a.h"], #错误,添加依赖后不需要copts = ["-Iheder"], #加上此行表示在workspacede 的header目录下搜索头文件,否则a.cc中需要写成header/a.hdeps = ["//header"],
)
上例中,
以下错误用法要注意:其他包中文件对本包不可见,只能添加依赖或者其他包导出要引用的文件
hdrs = ["//header:a.h"], xx
exports_files([“header/a.h”]) //将本包的target暴露给其他包使用(引用上层公共目录头文件可以考虑)
exports_files
exports_files([label, …], visibility, licenses)
exports_files()指定一个属于此package的文件列表,导出给其他package使用。这些文件往往未在BUILD文件中提及。
一个package的BUILD文件,一般只会引用其他package的BUILD文件提及到的文件,作为一个rule的输入或输出。其余文件并不与特定的rule相关联,仅仅是“data”。exports_files就可以保证这些文件也可以被其他package引用到(这对于shell脚本之类的数据特别有用)。
Bazel递归获取目录下文件
cc_library:
copts = ["-std=c++14"]+["-Iinclude/"] 指定C++14标准编译,并在当前或者依赖包的include目录下寻找头文件
tflite_jni_library库编译BUILD编写示例
tflite_jni_binary(
name = “libglai.so”,
srcs = glob([
“.cc",
".h”,
]),
deps = [],
linkopts = ["-landroid", “-llog”, “-lEGL”, “-lnativewindow”, “-lGLESv2”]
)
动态库查找问题
因为没有传递LIBRARY_PATH,所以boost库找不到。LIBRARY_PATH和LD_LIBRARY_PATH的区别见:
https://stackoverflow.com/questions/4250624/ld-library-path-vs-library-path
IBRARY_PATH is used by gcc before compilation to search directories containing static libraries that need to be linked to your program.
LD_LIBRARY_PATH is used by your program to search directories containing shared libraries after it has been successfully compiled and linked.
解决方案就在通过–action_env指定。
1 bazel build //3rdlib/test:bintest --action_env=LIBRARY_PATH=:/home/myaccount/boost_1_68_0/release/lib/
https://bazel.build/designs/2016/06/21/environment.html
bazel使用学习杂记相关推荐
- Fortran学习杂记(一)
Fortran学习杂记(一) 1. 内置函数 1) 数值运算 常见:- abs( ) - aimag( ) -conj( ) -max( ) ** -min( ) - mod(a, b) - real ...
- 51单片机学习杂记——基于STC89C52RC
51单片机学习杂记--基于STC89C52RC 我是看的b站郭天祥老师的课,说实话,我觉得我能力不是很够,所以记得很杂.废物了属于是. 接下来就是正文了 基本的元器件以及字母符号含义: 电容:帮助晶振 ...
- Python日常学习杂记
Python日常学习杂记 python -c 的作用 在命令行里执行python时,如果加上 -c,即 python -c xxx 那么,xxx就被当做一条指令(command)来执行,否则,就当做脚 ...
- 【菜鸟C++学习杂记】ASCII码转换和显示
笔者今年刚考上华东某高校的计算机研究生,本科虽是计算机学院,但期间主攻C#和Unity游戏开发,研究生属于小跨到计算机科学与技术,目前在进行硕导给的假期期间学习C++的任务,此类杂记主要记录下编码过程 ...
- Python学习杂记之静态网页学习
每日一丧:我就是丧本丧了 笔者最近在为学习django而做准备,开始看起了网页,我们先说几个好一点的学习网站吧. 初学前端,笔者最常浏览的就是W3School. 链接:http://www.w3sch ...
- rocketmq学习杂记
rocketmq总体架构图,来源于 https://rocketmq.apache.org/docs/rmq-arc/,可参考: 1.本地部署遇到的问题: rocketmq默认配置对内存要求较高,启动 ...
- 对学姐的U-net网络的学习杂记
.npy文件是一种存放数据的文件格式..npy格式是用python程序生成的,只能用python程序读取和显示. 转自:https://jingyan.baidu.com/article/7f41ec ...
- 学习杂记2:固态硬盘
12.29日看群 目录 一.主流的固态硬盘 二.PCIE4.0协议 一.主流的固态硬盘 固态硬盘(SSD,Solid State Disk,一般的,装系统就是把系统文件装进固态硬盘里) 1.SATA3 ...
- 【Obj-C】学习杂记-1
2014/12/20 夜 之前大学学过C++,忘得差不多了,前阵子看了些<[中文版]C语言编程:一本全面的C语言入门教程(第3版)>的pdf版,觉得慢,所以就直接开始看<Object ...
最新文章
- java流的写法_java IO-过滤流类的写法
- [云炬ThinkPython阅读笔记]2.7 注释
- 实现锁死的有滚动条的div的表格(datagird)
- apache 隐藏php版本,PHP+Apache环境中怎么隐藏Apache版本
- oracle临时表空间占用率过高,ORACLE 临时表空间使用率过高的原因及临时解决方案...
- mysql中的各种函数(日期函数、字符串函数、数学函数...)
- 在ie6下文字颜色不兼容的解决方法
- XeLatex在window上编译较慢的解决方法
- 项目管理十大知识领域之项目资源管理
- 数据仓库常见建模方法与大数据领域建模实例综述
- windows释放GPU内存方法
- 插值法(最邻近,双线性,双三次),图像放缩 python实现
- python模拟seo_百度统计原理分析-利用Python实现模拟访问
- 台积电偷笑:就算Intel技术牛我也要赶超你
- 荣耀YOYO建议新增快递取件服务
- activity从底部弹出动画
- Java房地产销售管理系统_JAVA JSP房地产销售系统 源代码 论文
- java导入Excel表格数据
- P2P资源共享环境下的版权冷战
- sec(x)多次积分