Bazel 内建函数
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Bazel 内建函数相关的知识,希望对你有一定的参考价值。
参考技术A示例
参数
将其作为常规构建目标指定时, extra_action 不会有任何有意义的输出。它允许开发者在构建流程中隐式的插入额外的动作。
这些 extra_action 作为命令行运行。这个命令行能够访问包含 protocol buffer 的文件并作为 $(EXTRA_ACTION_FILE)。这在原始动作中有详细的信息。它还能访问原始动作能够访问的所有文件。查看
extra_actions_base.proto 查看更多详细信息。 每个 proto 文件包含一个和 ExtraActionInfo 信息。
和其他所有的动作一样,extra actions 也是沙箱化的,并且一个被设计成能够处理该问题。
参数
alias 规则构建一个规则的别名。
别名只能用于 常规 targets。除此之外, package_group 和 test_suite 不能被定义别名。
alias 规则拥有自己的可见性定义。在其他方面,它的行为和所引用的规则一样除了一些小差别:
示例
参数
匹配一个预期的配置状态(可以用 Bazel flags 或者 平台约束 来表示)以触发相应的配置属性。查看 select 认识如何使用该规则, Configurable attributes 来认识一般功能特性。
示例
以下将会匹配任意一个在命令行或者 .bazelrc 文件中指定 --compilation_mode=opt 或者 -c opt 的选项。
以下将会匹配任意调用在 arm 上构建并且自定义 FOO=bar,例如 bazel build --cpu=arm --defina FOO=bar ...
假设存在构建约束和标签,以下匹配任何在 x86_64 架构和 glibc 版本2.25 的构建。注意,如果平台定义了除这两个平台外的其他值,也依然会匹配。
在所有这些情况下,构建时的这些配置都是可变的。例如一个 target 需要为不同的其他平台构建。这意味着即使一个 config_setting 没有在命令行层面匹配上,也有可能在构建其他配置时被匹配。(如何理解呢,就是说假如有一个 config_setting 我们称之为A,命令行并不满足其条件。但是在构建其他目标时,这些目标可能会直接指定这个A,此时就匹配上了)
注意
参数
bazel常用用法(part 2)
Functions
https://docs.bazel.build/versions/0.18.1/be/functions.html#workspace
package
package_group
licenses
exports_files
glob
select
workspace
workspace(name = "com_example_project")
此函数只可用在WORKSPACE文件中。
每个仓库的WORKSPACE文件都应该有 workspace(name = "...") 这么一行,为此仓库设立一个全局的名字。
这个名字是用作存储该仓库的runfiles的。例如,有一个foo/bar的runfile在本地仓库,WORKSPACE包含 workspace(name = "baz"),那么runfile将会在 mytarget.runfiles/baz/foo/bar 下可用。如果没有指定workspace name,runfile将会符号链接到 bar.runfiles/foo/bar。
workspace的name必须以字母开始,可以包含字母、数字 、下划线。应该以反向DNS的格式来描述这个project,以下划线区分各元素。例如,一个项目在域名 example.com/some-project,那么你应该使用com_example_some_project作为workspace名。
Remote repository规则的名字必须是有效的workspace名。例如,maven_jar(name = "foo")可以,但是maven_jar(name = "foo.bar")却不行,因为bazel会尝试写一个包含workspace(name = "foo.bar")的WORKSPACE文件。
以上是关于Bazel 内建函数的主要内容,如果未能解决你的问题,请参考以下文章