我有一个标签//foo\u base:bar,它生成一个foo\u base/bar\u 0\u 8\u 9.tar。
现在我还需要将其作为foo_concrete/bar.tar(在包//foo_concrete中)
这应该可以通过编写一些不复制文件的操作来实现。但这似乎有些过分。有更优雅的解决方案吗?您可以使用genrule创建符号链接:
genrule(
name = "make_bar_tar",
srcs = ["//foo_base:bar"],
outs =
我正在尝试使用Bazel为TensorFlow设置自定义构建系统。
我需要在配置步骤中创建一个临时文件,在构建步骤中将其用作缓存。
我可以在.bzl文件中创建它,方法是:
repository_ctx.file(filename)
配置之后,我可以看到它在文件夹中:
$HOME/.cache/bazel/_bazel_$USERNAME/%MD5%/external/%repository_name%
其中repository\u name实际上是repository\u ctx.name
我有一个测试,它试图启动一个嵌入式mysql。
它尝试将套接字文件写入Files.createTempFile(null,.sock”),返回时出现以下错误:
mysql启动失败,错误:[错误]套接字文件路径太长(>103):/private/var/tmp/_bazel_user/1c8ed8d84f6cb79483aa3cc4da758c86/bazel sandbox/247811212867584790357/execroot/some_workspace/_tmp/dfebe48cda
在我的bazelrc中,我有以下配置:
build:remote --spawn_strategy=remote
build:remote --remote_local_fallback
build:remote --genrule_strategy=sandboxed
build:remote --remote_rest_cache=http://HOST/PATH
这对于使用“bazel build-c opt--config=remote//…”的所有规则都非常有效。然而,对于某些类型的
标签: Bazel
toolchainabseil
假设我正在使用一个特定的CROSSTOOL+工具链,例如,我想编译一个第三方库,例如使用该工具链。是否可以在不修改第三方库的工作区的情况下执行此操作
如果我必须修改工作区,那么为工具链repo添加local\u repository()规则似乎足够合理。但在这种情况下,除非我也从工具链工作区复制新的\u http\u归档()(它提取实际的工具链二进制文件),否则我无法让它工作。需要添加本地存储库的依赖项对我来说似乎很奇怪-它们不应该被拉进来吗
我可以对工具链repo进行更改,但我更希望不必修补或
我知道bazel接受这两个文件名作为有效文件名
android工具似乎也有一个文件
通常,bazel对生成文件的扩展名有任何限制吗?例如,我可以使用BUILD.generated来描述从未生成的生成文件生成生成的生成文件吗?扩展名.tools是building Bazel本身的一部分。从Bazel的角度来看,它只是任何普通的文件。它是在这里取的:
然后最终在这里得到处理:
对于您提到的用例,一种方法是使用有意义的名称生成一个.bzl文件,该文件包含一个宏,您可以从BUILD或BUILD.baze
下面这些使用Bazel的项目的目的是什么,而不是构建软件
它们只是方便地为run命令提供了环境(与构建可移植可执行文件相反),还是我遗漏了什么
据我所知,Bazel只能用于运行E2E测试的子集,这取决于所改变的知识。免责声明:我对k8s和docker只有粗略的了解
Bazel不仅用于构建和测试,还可以部署,正如您在这些项目中发现的规则一样
我能说的最好的一点是,根据所改变的知识,Bazel只能用于运行E2E测试的子集
正确,但也将测试扩展到部署。如果您只更改了注入图像的Go二进制文件中的
每次我运行bazel test时,它都会构建所有目标测试二进制文件并运行它们。有没有办法只编译它们或不运行它们就生成它们?您可以使用bazel build只生成那些目标而不运行测试。您可以使用bazel build只生成那些目标而不运行测试。谢谢!我认为测试目标的处理方式将不同于常规目标。此外,如果您只想构建测试目标,请通过--build\u tests\u only标志。谢谢!我认为测试目标的处理方式将不同于常规目标。此外,如果您只想构建测试目标,请通过--build\u tests\u on
我试图让bazel在Windows和Linux上都使用clang作为编译器。(Debian 10,如果需要的话)
在Windows上,我通过添加一个Windows clang平台并注册所述的工具链,使其正常工作。
有没有类似的简单方法可以让您在Linux上切换到使用clang?我已经找到了一个解决方案,但据我所知,您有两个(或三个)选择:
您可以使用您的woncc\u工具链。这可以说是“正确”的解决方案
您可以尝试从中调整cc_configure(),并在工作区中使用它。但这既有挑战性,也不一定
我们必须将一个特殊的linkopts标志传递给使用的cc_库规则,特别是针对Debian 10附带的GCC版本(GCC 8.3)
我不想让开发人员在顶层传递一个--config=old\u gcc或类似文件
我希望这样的咒语能奏效:
linkopts = select({
"@bazel_tools//tools/cpp:gcc": ["-lstdc++fs"],
"//conditions:default": [],
}),
但是a)gcc不是se
我的工作区中有以下maven_jar:
maven_jar(
name = "com_google_code_findbugs_jsr305",
artifact = "com.google.code.findbugs:jsr305:3.0.1",
sha1 = "f7be08ec23c21485b9b5a1cf1654c2ec8c58168d",
)
在我的项目中,我通过@com\u google\u code\u findbugs\u jsr305//jar引用它。
是否有任何方法可以访问用于从skylark或gen_规则构建依赖项的编译器标志?我对include路径和定义特别感兴趣。我们正在研究它。嗯,现在不行,但很快会的。您可能希望订阅,并在此处描述您的需求,以便我们在设计API时考虑这些需求。标题是由什么构建的,是否有genrule或其他规则可以执行此操作?这是cc_库规则的一部分。抱歉,仍然混淆。为了做到这一点,我需要用于构建标头的实际编译器标志。-这听起来像是头文件是编译器的输出。不知怎么回事?你能举一个简单的管道例子吗?对不起,我不太准确。我据此
在建立目标后,我需要触发这些目标的部署
为了真正不浪费任何时间我希望将此作为构建规则。现在,为了实现这一点,我希望每次都进行部署。
因此,问题是:
如何强制从头开始确定地重建目标?作为第二步,这样做会更容易,例如
java_binary(
name = "target1",
...
)
java_binary(
name = "target2",
...
)
sh_binary(
name = "deploy-targets",
srcs =
作为我们创建bazel maven过渡互操作工具(从粒度更大的bazel Jar创建maven大小的Jar)的工作的一部分,
我们已经编写了一个方面,它在整个bazel repo的bazel build上运行,并将重要信息写入txt文件输出(例如:jar文件路径、编译deps目标和运行时deps目标等)
我们遇到了一个问题,回购协议的代码被更改,导致一些txt文件不再被写入。但是以前运行的旧txt文件(在代码更改之前)仍然存在
有没有办法知道这些txt文件不再相关?您应该能够使用--build\
考虑一些路径/构建文件:
通过检查bazel-bin文件夹,我找到了bazel-bin/somepath/libbar_proto-speed.jar
如何使用bazel查询从//somepath:bar\u java\u proto获取bazel bin/somepath/libbar\u proto-speed.jar?您没有
了解输出路径需要执行Bazel的加载和分析阶段,即1加载构建文件,2分析依赖项,以得出执行计划和称为动作图的具体构建动作
Bazel查询只运行加载阶段,而不运行分析阶
是否可以从py_二进制规则中指定bazel“-build_python_zip”标志,这样我就不必每次在工作区中使用bazel时都添加此标志?似乎没有办法按照py_binary目标指定此标志
但是,您可以使用bazelrc文件来存储常用选项。在/.bazelrc的工作区的bazelrc中添加以下行:
build --build_python_zip
请注意,使用此方法,bazel build、bazel test和bazel run的每次调用都将包含此标志
管理第三方依赖关系一直是个麻烦。在我们的整体式回购中,有70多个第三方回购引入了存储库规则(例如go\u repository,git\u repository,等等)
一些回购协议作为可传递依赖项添加。在升级了一些直接的第三方依赖项之后,一些可传递的依赖项变成了悬挂链接
我已经尝试了以下方法:
$ bazel query 'somepath(//...,@REPO_NAME_IN_QUESTION//...)'
运行速度非常慢,我在所有构建文件中都得到了快速grep——因为repo规则总是以
标签: Bazel
google-cloud-build
我正在使用谷歌云构建,其中一个步骤是运行Bazel构建。我尝试使用替换在一次调用中构建多个目标
当:
步骤如下所示:
目标替换是//foo///条形码/…
实际运行的命令是bazel build”//foo/..//bar/..“,这显然会导致无效的目标名称错误。(单个目标工作正常)
最终结果应该类似于bazel-build//foo///条形码/…
有没有一种方法可以在一个子系统中“拆分”多个参数?或者让命令单独处理参数?我很难找到解决方法。我用Bazel(不是build,我没有示例,但有he
我正在使用Bazel,有许多构建文件,希望自动生成零件。有两种选择
1) 我创建了一个BUILD.template文件,替换文件中的相应元素,并在生成后将其重命名回BUILD
。。或者
2) 我使用一个附加文件,如BUILD.ext,并在BUILD文件中使用include指令,该文件包含给定的文件。但我找不到任何包含的支持
非常感谢您的帮助 一种可能性是,您可以在.bzl文件中定义模板,并在构建文件中加载这些宏
我可以在Bazel中创建一个label_标志,以允许命令行标志依次与BazelBUILD文件中的config_设置相匹配
但是,我不想硬编码标签\u标志的默认值,而是在评估存储库\u规则(或工作区文件的其他部分)时,根据系统计算一个好的默认值
我想到的最好(但很糟糕)的方法是从.bzl文件加载默认值,该文件是使用存储库中的\u ctx生成的
我觉得通过文本替换生成新文件可能不是正确的方法,但我找不到其他方法。思想?帮助?使用检查主机系统的存储库规则生成bzl文件是实现您现在需要的唯一方法。所以你
我正在编写一个构建后工具,它需要目标jar文件列表的位置。
对于这些位置,我有一个在目标列表上运行的方面(分别针对每个目标使用--aspects),并获取每个目标的jar文件路径
我已设法在每个目标的输出文件夹中的自定义输出文件(例如jar.txt)中获取每个jar文件路径
但这意味着我需要分别检查每个jar.txt文件以获得位置
有没有办法将jar文件路径累积到单个文件中?
比如:
尝试使用方面中的append命令写入同一输出文件夹。我不确定是否可以共享输出文件夹
创建一个依赖于所有相关目标的
我正在使用bazel构建我的android项目。我需要访问一个环境变量DEBUG(自定义)来确定BuildConfig.DEBUG的值应该是多少,但是我在Bazel的文档中找不到任何关于这个的描述。巴泽尔支持这一点吗?或者我能做些什么来达到我的目的
非常感谢您的帮助
PS:我正在使用genrule规则生成我的BuildConfig.java,但是BuildConfig.DEBUG的值应该由环境变量DEBUG确定:
genrule(
name = "build-config-genrule
我正在为scala规则实现类似于strictJavaDeps的特性。
如果使用warn或error,我希望能够在运行时进行配置
我似乎记得skylark规则无法创建和访问命令行标志,但我不记得它们是否可以访问现有的标志
主要区别在于,现有的标记已经被解析,因此可能也会在某些ctx中传递。您想要的标记(strict\u java\u deps)目前无法通过Skylark获得。但是,我们没有理由不能将其添加到跟踪中
对于其他标志,上下文可以访问配置片段,配置片段可以访问一些已解析的命令行标志。我认为
理想情况下,我想要一个目标的输出文件列表,而不需要构建。我想这应该是可能的使用cquery运行后期分析,但不知道如何。这里的“输出文件”到底是什么意思?您的意思是想知道在命令行上构建目标时生成的文件吗
您希望在什么时候获得此信息?是否确实要调用bazel query命令来获取此信息,还是希望在分析过程中使用它?我认为没有办法使用bazel query,来获得输出文件的确切预期绝对路径(甚至是工作区相对路径,例如,bazel out/foo/bar/baz.txt)
这可能比你想要的要复杂一些,但
在使用bazel之前,我总是需要以下代码来启动所有测试
::testing::GTEST_FLAG(output) = "xml";
::testing::GTEST_FLAG(output) = "xml:./test_detail.xml"
::testing::InitGoogleTest(&argc, argv);
int iRet = RUN_ALL_TESTS();
但是cc_测试和bazel测试似乎不需要这个,它只需要测试代码
那么,cc_测试和bazel测试ready做
调试Bazel生成文件时,了解系统默认打开的值或通过主机/目标设置确定的值(例如调试选择规则)可能会很有用
是否有办法通过查询或直接在构建文件中查看平台和其他配置值(如cpu、os等)
是否也可以生成所有这些变量的列表?有许多不同的配置选项可用,很容易忘记其中的内容以及它们可能被设置为什么(例如,crosstool\u top、host\u crosstool\u top等)。这不是一个完美的答案,但是在命令行中添加--toolchain\u resolution\u debug标志可以让您看到
我正在使用,我想传递一些参数。其中一些参数是指向文件的路径:我的源代码,因此我可以获取覆盖率信息。有一个args参数被传递到PEX pytest可执行文件:
pex_pytest(
name = "test",
srcs = glob(["**/*_test.py"]),
args = [
"--cov=path/to/code",
"--cov-config=path/to/.coveragerc",
],
deps =
我通过bazel build生成工件。我只想在这些工件发生更改时部署它们
检测工件是否改变的最佳方法是什么
…有没有办法获取构建目标的摘要?理想情况下不需要构建它?这里的方法在很大程度上取决于所有细节
一种方法是使用构建事件协议进行设置:
这可能比您想要处理的设置更多
另一种方法是使用genrules或类似方法散列您感兴趣的所有工件(我不知道如何让bazel输出工件散列)。然后创建一个二进制文件(sh_binary,或其他文件),将您感兴趣的所有工件及其哈希值作为输入,并将这些哈希值与部署的哈
假设我有这样一条规则
foo(
name = "helloworld",
myarray = [
":bar",
"//path/to:qux",
],
)
在这种情况下,myarray是静态的。
但是,我希望它由cli提供,比如
bazel run//:helloworld--myarray=“:bar,//path/to:qux,:baz,:other”
这怎么可能
感谢为了得到您想要的东西,Bazel需要在Starlark定义的命令
我按照给出的说明设置我的机器以运行SyntaxNet。我已经安装了所有必需的软件,并确保版本与说明相同。但是当我使用命令bazel test--linkopt=-headerpad\u max\u install\u names syntaxnet/…运行bazel测试时。。。util/utf8/…在我的Mac OS上,每次都会失败。我收到以下错误消息
将SIGTERM发送到以前的Bazel服务器(pid=42104)。。。正在将SIGKILL发送到上一个Bazel服务器进程组(pid=4210
我有一个庞大的项目,它由许多绑定在一起的库(DEP)组成
编译时,Bazel创建著名的虚拟包含,并为编译器添加相应的-iquotes/-I
由于此列表非常大,编译器失败并出现以下错误:
/my/path/to/the/toolchain/cc1': execv: Argument list too long
我确实尝试删除堆栈上的限制,当前ARG_MAX为:
jbasila@fedora $ getconf ARG_MAX
4611686018427387903
实现此功能的一个好方法可能是
我有一些预先构建的第三方库,我必须将它们包含在我的Bazel构建中。所以我在我的工作区中有这样的东西:
new_local_repository(
name = "thirdparty",
path = ".install/OSX/DEBUG",
build_file = "bazel/BUILD.third_party",
)
而BUILD.third\u party看起来像:
cc_library(
name = "glog",
srcs = ["glog
建议从源代码构建bazel的两种方法:
bazel构建//src:bazel--编译模式=opt
bazel构建//src:bazel开发
文件上说,第一个:
生成较小的二进制文件,但构建速度较慢
但是是否有任何性能优势,或者该选项只影响大小?Bazel(4.0)内部由客户端和服务器组成。客户端(前端)很小,与重型Bazel服务器(后端)通信。微型客户端是用C++编写的,重型BAZEL服务器(后端)是用java编写的。
编译模式=opt只影响C/C++代码的生成。优化的构建通常比调试或快速构建运
我们在src/test/resources中有测试依赖项文件。当测试类通过(例如)获取这些测试文件时,这些测试文件最终位于JAR和类路径中
在Bazel中,依赖于测试文件并将其显示在类路径中的首选方式是什么
我的src/test/resources/BUILD中有以下内容:
filegroup(
name = "test-deps",
testonly = 1,
srcs = glob(["*.txt"]),
visibility = ["//visibility
我有这样一个方面:
def _foo_aspect_impl(target, aspect_ctx):
fail("KIND: {}, DATA_RUNFILES: {}".format(aspect_ctx.rule.kind, [p.path for p in target.data_runfiles.files]))
它失败并出现错误:
KIND: filegroup, DATA_RUNFILES: [<hugelistofsrcsfiles>]
让我困惑的是,我从
我有一个iOS框架,它依赖于(大概是谷歌维护的)pod,名为“!“原型编译器”。为了构建我的框架,我需要在沙箱中使用它。因此,我有一个genrule,可以尝试将其包含在
src=glob(['Pods/!ProtoCompiler/***'))但我得到以下错误:
错误:BUILD:2:1://Foo:framework调试:无效标签'Pods/!“genrule”规则中属性“srcs”的元素1118中的ProtoCompiler/google/protobuf/any.proto:目标名称“Po
在Bazel官方文档中,有一个解释如何创建一个Java库,该库由常规Java文件和由:gen_Java_srcs规则生成的文件构建。为了便于阅读,我在此处重写了此代码:
java_library(
name = "mylib",
srcs = glob(["*.java"]) + [":gen_java_srcs"],
deps = "...",
)
genrule(
name = "gen_java_srcs",
outs = [
"F
我想在Bazel中创建docker图像。我们当前的构建在docker构建中进行了大量的apt-get,以引入包及其依赖项。这并不理想,因为构建系统没有跟踪我们需要的实际上游包的真正概念
但是-我们绝对不想手动尝试解析和排序deb包docker映像中的每个依赖项
是否有一个模块或方法允许我将apt get install[东西]的等价物引入构建环境,该环境也会自动拉下它所依赖的包(这样我就可以通过各种提取函数将它们安装到docker映像中)
理想的结束状态是Bazel依赖树根据其各自的存储库为我跟
标签: Bazel
remote-execution
默认情况下,bazel每次调用都生成UUID
我们正在使用的一些工具使用此Id将其实体链接到特定的bazel调用
是否有一个巴泽尔旗来强制我们自己的身份而不是巴泽尔的?
我查看了bazel官方文档,但没有找到一个您可以将--invocation\u id=MY\u id传递给任何bazel命令以覆盖调用id
我试着在bazel附近做工具,试着调查BEP
当查看失败的操作时,似乎有一个用于退出代码的字段,它包含在标准bazel输出的文本中,但不在BuildEvent协议中
bazel中的示例行:
错误:/Users/endobson/proj/racket/yaspl2/libraries/BUILD:703:1:无法生成文件库/resolved-imports-language-test_lib.o:yasplcomile库/resolved-imports-language-test_lib.o失
考虑在工作区文件中编写的以下bazel规则:
container_pull(
name = "release-base",
registry = "mydockernet:9443",
repository = "release-base",
digest = "sha256:...",
tag = "1.8.2",
)
问题是标记值1.8.2写在yamlconfig文件中,我们希望尊重DRY原则(从config文件读取值,而不是复制bazel文件中的值
我用Bazel动作图来观察幕后发生了什么。我使用的是V1(analysis.proto),图形看起来很完整,除了使用“Middleman”助记符的操作之外,其他一切都是有意义的。我到处都找过了,没有提到这个助记符。助记符本身非常奇怪,因为它没有做任何具体的事情。我已粘贴了下图的一个版本:
artifacts {
id: "0"
exec_path: "bazel-out/k8-fastbuild/internal/_middlemen/_S_Smain_Ch
我在这里尝试按照投稿人的说明进行操作:
我有一个成功的master构建(即bazel build//src:bazel),但文档也建议“您可能想要构建bazel使用的各种工具。”我正在尝试这样做,例如:
cd src/java_tools/singlejar
bazel build //...
但它在以下方面失败了:
ERROR: /Users/.../bazel/third_party/protobuf/3.2.0/BUILD:621:1: no such target '//extern
在我的一条规则中,我想通过unzip-d解压一个文件,以便访问一些标题
目前,我正在使用路径上的任何解压来实现这一点
ctx.actions.run(
...
executable = "unzip",
)
或者,我可以使用/usr/bin/unzip来避免依赖我的路径。然而,不清楚惯用的方法应该是什么。根据我对文档的阅读,理想情况下,我会为规则调用的解压设置一些排序Bazel二进制目标。不过,现在还不清楚我将如何定义二进制目标,也许是一个sh_binary正确的解决方
bazel fetch是否支持排除某些目标,例如。g
bazel fetch -- //... -//some/target/...
不幸的是,它似乎不起作用:
ERROR: syntax error at '- //some/target/...'
对于bazel build来说,使用“减号运算符”(-)排除目标似乎是可行的
有人能确认此软件是否属于ECCN类别吗?如果是,请确认适用的号码
如果没有,请回答以下问题,以便进行自我评估:
1、软件是否执行任何加密或使用任何加密过程?是/否
2.如果问题1的答案为“是”,请说明加密是编码到应用程序中还是单独调用(如使用SSL)
3.如果问题1的答案是肯定的,请说明加密/加密服务的功能
A、 版权保护目的(包括使用许可证密钥/代码)
B、 用户身份验证目的
C、 加密数据库等功能的核心部分
D、 加密软件和主机系统之间的通信
背景资料:
出口管制分类号(ECCN)是一种特定
我想为每个Bazel项目维护一个依赖项及其版本的列表
如何查询生成规则所依赖的工作区规则?如何访问包含的属性
编辑我想根据生成规则查询的内容。因此,如果我有多个规则,我只需要基于我要求的规则的工作区信息。我这样做的方式是以单独的格式保存工作区DEP,迭代它们,然后构建一个降价文档
看
可能有一种方法可以通过genquery和native.existing_规则来实现,但我还没有尝试过
嗯,,
保罗谢谢,我先使用了pubref规则,但希望尽可能接近bazel回购规则。他们在理解巴泽尔和云雀方面仍然
我正在编写一个自定义规则,该规则从cc_库、cc_二进制、apple_静态_库以及其他一些特定于平台的规则中获取输入。我想在自定义规则的实现函数中通过引用ctx.attr.foo查看提供给我的每个API
这里有一个提供者列表,但没有说明哪些规则正在使用它们
查看这些规则为我提供的内容是否有最佳做法,或者是否需要检查每个规则的源代码?您可以使用获取给定目标的提供者列表。类似这样的内容有助于调试:
def\u print\u attrs\u impl(ctx):
对于ctx.attr.targets
我看到bazel在~/.cache/bazel下放置了大量资产。考虑到这已经是一个缓存,当您有两个目录包含一个工作区文件并构建几乎相同的内容时,--disk\u cache标志的用法是什么。如果没有--disk\u cache,两个工作区都将在~/.cache/bazel中拥有自己的缓存工件,并且使用--disk\u cache它们可以共享工件
正如皮亚斯顿指出的那样:
您可以使用--disk\u cache,而无需设置远程缓存。你可以
如果需要,甚至可以使用--disk\u cache=~/.
我试图让bazel为一个颤振项目构建一个jar和一个so文件,但每次我在命令提示符中输入'bazel build'时,我都会得到
错误:只有在具有工作区文件的目录下的工作区中才支持“build”命令。
请参阅上的文档
我读过一些文档,看起来解决方案是创建一个名为“WORKSPACE”的空白文件,但我不明白这个文件应该存储在哪里。这是我读过的文档的链接
提前谢谢 工作区文件将转到工作区源的根目录。它是所有构建包的顶级目录,也是您使用//引用的绝对路径的起点。例如,如果您有一棵这样的树:
.
├──
1 2 3 4 5 6 ...
下一页 最后一页 共 14 页