bazel与C++

本文是对于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

你可能感兴趣的:(其他,bazel)