本文是对于bazel使用的一个学习小册子。
转帖请注明出处~
官网
http://www.bazel.io/
安装步骤
sudo add-apt-repository ppa:webupd8team/java
sudo apt-get update
sudo apt-get install oracle-java8-installer
echo "deb [arch=amd64] http://storage.googleapis.com/bazel-apt stable jdk1.8" | sudo tee /etc/apt/sources.list.d/bazel.list
curl https://storage.googleapis.com/bazel-apt/doc/apt-key.pub.gpg | sudo apt-key add -
sudo apt-get update && sudo apt-get install bazel
语法
主要包含WORLDSPACE和BUILD文件的语法
一、 BUILD文件的语法
cc_library() cc_binary() cc_proto_library()case1: (看个样子)
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",
],
)
case2:(关于proto)
cc_library(
name = "lib",
deps = [":foo_cc_proto"],
)
cc_proto_library(
name = "foo_cc_proto",
deps = [":foo_proto"],
)
proto_library(
name = "foo_proto",
srcs = ["address.proto"],
deps = [":zip_code_proto"]
)
srcs 源文件
hdrs 头文件
deps 依赖库
visibility 可见范围
copts 编译参数
linkopts 链接参数
1. deps中当前目录下用":",根目录用"//";
2. srcs、hdrs、deps分别表示源文件、头文件、依赖库,用中括号包含所有文件名;批量语法:glob(["*.cc"]),排除特殊文件用exclude,case:
srcs = glob(
["googletest-release-1.7.0/src/*.cc"],
exclude = ["googletest-release-1.7.0/src/gtest-all.cc"]
),
3. 还可以在cc_library中定义visibility,表示可见范围,默认情况下target只对同一个BUILD文件中的其他target可见。et: visibility = ["//main:__pkg__"],
4. 对cc_binary和cc_library来说,都可以用copts添加include路径,et: copts = ["-Ithird_party/some_lib"]
5. linkopts是添加链接参数,et: linkopts = ["-pthread"],
二、WORLDSPACE文件的语法
case:(下载gtest)
new_http_archive(
name = "gtest",
url = "https://github.com/google/googletest/archive/release-1.7.0.zip",
sha256 = "b58cb7547a28b2c718d1e38aee18a3659c9e3ff52440297e965f5edffe34b6d0",
build_file = "gtest.BUILD",
)
1. 一般情形下,WORLDSPACE不需要填写什么内容。
三、 bazel 命令
1. build 编译bazel :bazel build main:hello-world
2. clean 清除output:bazel clean
3. help man-book:bazel help [command]
四、output
生成文件:./bazel-bin/main/hello-world