博文

目前显示的是 四月, 2018的博文

Bazel公共的函数规则

common-definitions 不管是写WORKSPACE,BUILD或者其他文件,都要遵循一些Bazel的规则,有些规则是bazel内置的函数使用说明,有的规则是一些语法分析用到的。 所有build rule的公共属性 只列举了部分 features rule中规定的package级别可使用的features列表,默认是空。目前还没搞懂具体是指什么。 data List of  labels ; optional :表示这个rule在运行时所需的文件列表。 visibility List of  labels ; optional; default  default_visibility  from  package  if specified, else private 定义了这个rule是否可以被别的package中的rule所使用。 有5种形式的label可以使用: 1、 ["//visibility:public"] : Anyone can use this rule 2、 ["//visibility:private"] : Only rules in this package can use this rule.  3、 ["//some/package:__pkg__", "//other/package:__pkg__"] : Only rules in  some/package  and  other/package  (defined in  some/package/BUILD and  other/package/BUILD ) have access to this rule. 必须是规定的package下面的BUILD文件中的rule才有权限使用 4、 ["//project:__subpackages__", "//other:__subpackages__"] : Only rules in packages  project  or  other  or in one of their sub-packages have

Bazel的用户手册

手册 https://docs.bazel.build/versions/master/user-manual.html 运行Bazel命令,需要去workspace的根目录或者它的子目录下。然后输入bazel即可。 下面列举一些用到命令: build :build所指示的target clean :删除输出文件以及可选停止服务 help :打印command的help信息 info :显示bazel服务运行时的信息 fetch :获取某个target的所有外部依赖 query :执行依赖图的查询 run :运行指定的target shutdown :停止Bazel服务 test :build以及test指定的target version :打印Bazel的版本号 具体获得更多帮助信息: bazel help <command> Prints help and options for <command>. bazel help startup_options Options for the JVM hosting Bazel. bazel help target-syntax Explains the syntax for specifying targets. bazel help info-keys Displays a list of keys used by the info command. 命令行参考 https://docs.bazel.build/versions/master/command-line-reference.html bazel [<startup options>] <command> [<args>] or bazel [<startup options>] <command> [<args>] -- [<target patterns>] 选项语法: 传递参数值 -

Bazel BUILD文件的编写

除了公共部分BUILD文件可以使用的规则外,还有一些与语言相关的build rule https://docs.bazel.build/versions/master/be/overview.html 这里根据不同的语言,来写整理。 Java Bin rules java_binary java_binary( name ,  deps ,  srcs ,  data ,  resources ,  args ,  classpath_resources ,  compatible_with ,  create_executable ,  deploy_manifest_lines ,  deprecation ,  distribs ,  features ,  javacopts ,  jvm_flags ,  launcher ,  licenses ,  main_class ,  output_licenses ,  plugins ,  resource_jars ,  resource_strip_prefix ,  restricted_to ,  runtime_deps ,  stamp ,  tags ,  testonly ,  toolchains ,  use_testrunner ,  visibility ) build一个java的jar文件,并且套上一个shell的脚本来辅助运行。 隐式的输出target: name.jar name-src.jar name_deploy.jar:这个比较特殊,必须显式的build才会生成,比如 bazel build //package:target_deploy.jar name_deploy-src.jar Lib rules java_import java_import( name ,  deps ,  data ,  compatible_with ,  constraints ,  deprecation ,  distribs ,  exports ,  features ,  jars ,  licenses ,  neverlink ,  proguard_specs ,  restricted_to

Bazel WORKSPACE文件编写

WORKSPACE文件主要就是命名workspace以及声明外部的依赖,这就包括外部依赖的获取方式及获取方法。 外部依赖 https://docs.bazel.build/versions/master/external.html WORKSPACE文件告诉Bazel如何去得到其他的工程源,然后package中的BUILD文件就可以根据WORKSPACE中的外部target名字写依赖关系。 先举个例子来看下在本地的两个工程如何实现依赖关系: / home/ user/ project1/ WORKSPACE BUILD srcs/ ... project2/ WORKSPACE BUILD my-libs/ project1希望能依赖project2/BUILD下的target :foo,需要指明project2可以在 /home/user/project2 中被找到,而且接下来project1的BUILD就可以写依赖关系: @project2//:foo WORKSPACE文件允许用户的目标依赖其他文件系统的目标或者从网上下载的目标。 WORKSPACE文件的语法和BUILD文件一致,不过会用到一些特定的内置rule,细节参考下一个章节的内容。 一共有三种外部依赖的主要类型: 依赖于其他Bazel工程 根据这个Bazel工程所处的位置不同,调用不同的内置rule来获得: local_repository :本地 git_repository :git仓库 http_archive :网络下载 假如现在有个工程 my-project/ ,需要依赖与另一个工程 coworkers-project/ 。这两个都是Bazel工程,那么需要在 my_project/WORKSPACE 下添加: local_repository ( name = "coworkers_project" , path = "/path/to/coworkers-project" , ) 然后对于coworke