如何使用提供的工具而不是规则构建的工具编写Bazel测试规则?

我有一个测试工具(大致上是一个差分工具),它接受两个输入,并返回一个输出(两个输入之间的差异)和一个返回代码(如果两个输入匹配,则返回0,否则返回1)。它内置于Kotlin中,可在my repo中的//java/fr/enoint/phosphore上获得 我想编写一个规则,测试由某个对象生成的文件是否与存储库中已经存在的引用文件相同。我用ctx.actions.run尝试了一些东西,问题是设置了test=True的规则需要返回由该规则生成的可执行文件(因此不是规则提供的工具)。然后,我尝试将其

如何在BUILD.bazel中获得git commit SHA?

我的目标是使用Bazel创建一个名称中包含当前头部git提交SHA的zip文件。 我知道有一种叫做冲压的技术,但我很难思考如何将其用于我需要的东西。 我已经有了一些代码(规则)来创建我需要的zip文件: def go_binary_zip(名称): go_二进制( name=“{}\u bin”。格式(名称), 嵌入=[“:转到默认库”], goarch=“amd64”, goos=“linux”, 可见性=[“//可见性:专用”], ) #如何在这里添加git提交SHA? native.gen

Bazel 运行文件位置替换

我试图在cc\u二进制规则的输出上运行qemu。为此,我创建了一个自定义规则,它非常类似于txt文件上的cat命令,但我想在cc\u binary规则的输出elf文件(“:test\u portos.elf”)上调用qemu。我的文件如下: 运行_tests.bzl 建造 问题是,在(自定义规则的)命令中使用“:test_portos.elf”的位置,而不是运行文件的位置。我也尝试过使用$(location:test\u portos.elf)和ctx.expand\u location一起使用

跨带标签的存储库使用bazel宏

我有两个存储库,客户端和库 在客户端的工作区文件内部,客户端将库作为名为“foo”的http_归档文件导入 在客户端内部,我想使用引用库中目标的库宏。我的问题是,库宏不知道哪些是作为“foo”导入的,因此当宏展开时,找不到目标。库/工作区: 工作区(name=“library”) 库/some.bzl: def my_macro(): native.java_library(name = "my_macro_lib", deps = ["@library//:my_macro_li

后处理bazel测试命令生成的报告

我在CI服务器上使用Bazel来构建和测试C++库,但是我不能检索生成的报告/日志文件。 我想知道是否有一种方法可以引用这些生成的文件,以便在genrule中进一步使用,从而允许我对文件进行后期处理(生成HTML bazel执行: load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive") http_archive( name = "gtest", url = "https://github.com/

让所有Bazel包公开其文档文件(或具有给定扩展名的任何文件)

Bazel最近一直在为我工作,但我偶然发现了一个问题,我还没有找到满意的答案: 如何从工作区收集具有特定扩展名的所有文件 这个问题的另一种表述方式是:如何获得在一个完整的Bazel工作区中执行glob()的功能等价物 背景 这种情况下的目标是收集所有标记文件以运行一些检查,并从中生成静态站点 乍一看,glob()听起来是个好主意,但一旦它运行到构建文件中就会停止 当前方法 当前的方法是在沙箱之外运行收集/生成逻辑,但这有点脏,我想知道是否有一种既“适当”又简单的方法(即不要求每个构建文件显式公开

我是否需要安装Java8SDK来使用BazelBuild来构建C++;项目

这个问题分为两部分: 从我可以看到的,Bazel是用C++、java和一些Linux .SH文件混合编写的。我不确定核心是java还是C++。发布页面中的Windows二进制文件是.exe而不是.jar,这是否意味着如果我从不需要使用Bazel构建Java,我就不需要Java SDK 如果第一部分为false,那么它必须是Java8SDK,还是Java8JRE就足够了 最好是Java8。不久前,我在Java7中使用了它,但现在它已经被弃用了 您需要JDK,因为Bazel只是一个构建管理工具。它调

bazel在构建android项目时是否支持public.xml

我从gradle迁移,在我的android项目上使用,gradle可以正常工作,但是当我用bazel构建它时,它失败了,出现以下错误: 错误:/var/folders/th/cxy34j2x0vq9zzdh8qstx5jr0000gn/T/android_resources_tmp2185237642135735709/merged_resources/values/values.xml:6772:错误:此处声明的公共符号drawable/skin_未定义。 错误:/var/folders/t

Bazel Maven迁移可传递依赖项范围

我正试图在一个具有DEP和可传递依赖项的项目上使用生成_工作区。生成generate_workspace.bzl后,我将其复制到工作区,并按照bazel文档中的说明进行操作。虽然我在generate_workspace.bzl中看到了DEP及其可传递的DEP,但我在java_库阶段的项目无法解析可传递的DEP。。当我在IDEA中导入相同的项目时,我没有看到正确加载的JAR 我的疑问是,我看到generate_workspace.bzl将其transitve deps添加为runtime_deps

Bazel:如何在Skylark中访问工作区状态变量?

我使用的是与稳定状态变量类似的 我想将STABLE.*变量公开给定制的Skylark规则。我应该怎么做?规则\u docker支持从工作区状态文件中加盖印花。它似乎使用ctx.info\u文件和ctx.version\u文件来访问它们: 它们不在已发布的文档中,但Bazel源代码似乎表明它们是正确的:

如何在不使用相对路径的情况下从另一个规则访问bazel规则的输出?

我试图使用Bazel编译一个基于dhall kubernetes的dhall程序,以生成一个kubernetes YAML文件 不使用dhall kubernetes的简单bazel宏可以正常工作 我用dhall的依赖解析来下载dhall kubernetes,请参见。这也可以工作,但速度非常慢(我认为是因为dhall分别下载每个远程文件),并为bazel规则的执行引入了网络依赖性,我希望避免这种情况 我的首选方法是使用Bazel下载dhall kubernetes的归档发布版本,然后让规则在本

bazel:取和解包额外的包裹?

我尝试构建libedgetpu。这需要很多第三方软件包(例如coral crosstools)。 我只能取回包裹并打开包装,而不必构建? 我需要在构建之前修补程序包。有很多可能性。是该依赖项的定义 也许吧( httpèu档案, name=“coral\u crosstool”, URL=[ "https://github.com/google-coral/crosstool/archive/“+coral\u crosstool\u commit+”.tar.gz”, ], strip_pref

为什么bazel比gradle快

最初,我使用gradle来构建我的android项目,但最近,我将其迁移到bazel,我发现bazel确实比gradle快,所以我想知道为什么,但是bazel的文档对此没有给出多少想法,有人能帮我吗 非常感谢 完全披露:我在Bazel工作 这不是一个容易回答的问题,原因有二。首先,性能高度依赖于场景。例如,我们通常期望一个干净的构建比一个只有一个文件更改的构建要慢。其次,我不知道Gradle内部是如何工作的,他们最近做了很多工作来提高Gradle的绩效 但我可以谈谈Bazel和我们正在做什么来加

如何在“bazel query”命令中传递自定义标志?

我尝试使用自定义标志查询DEP。比如说, bazel查询--define=using\u cuda=true“deps(@org\u tensorflow//tensorflow/core:lib)” 巴泽尔抱怨说: ERROR: Unrecognized option: --define=using_cuda=true 如何将自定义标志传递给bazel query命令?bazel query不支持--define标志,因为命令不使用它。取而代之的是使用,它代表“可配置查询”

Bazel Starlark:如何按程序生成构建文件?

通过http_archive下载归档文件后,我想运行一个脚本,从文件夹结构中生成一个构建文件,并在其中生成Cmake文件(目前我是手动完成的,很容易编写脚本)。我在starlark文档中找不到任何关于如何打开、读取和写入文件的内容,但由于http_存档本身是从bzl文件加载的(虽然还没有找到该文件的源…),并生成生成构建文件(通过从存档中解包)我想一定可以为http_归档编写一个包装器,该包装器也会生成生成文件?使用时,可以使用BUILD_file参数来创建生成文件。要动态生成它,我认为可以使用

减少bazel内存使用

我在一台内存为4GB的计算机上使用bazel(用于编译tensorflow项目)。但是,Bazel没有考虑我拥有的内存量,产生了太多的作业,导致我的机器交换,导致构建时间更长 我已经在我的~/.bazelrc build --ram_utilization_factor 30 test --ram_utilization_factor 30 但这没有帮助。如何理解这些因素?我是否应该随机试用一些其他标志?一些其他标志可能会有所帮助: --host_jvm_args可以通过设置-Xms和/或-

Bazel 如何确定用户是否正在从Skylark生成调试

Skylark中的ctx变量是否有办法确定用户是否使用调试模式(-c dbg)进行构建。我想在Skylark中做出与此相关的决策。print(ctx.var[“编译模式]) 值将是“快速构建”、“dbg”或“opt”。print(ctx.var[“编译模式”) 值将为“快速构建”、“dbg”或“opt”

如何使用Bazel包含已构建的静态库(.a文件)?

我试图使用Bazel包含一个小的静态库,但是无论我尝试了什么方法,我似乎都遇到了一个错误 静态库由我创建,非常简单。在另一个.cc文件中,我只调用这个库中的三个函数。虽然我能够使用Makefile构建一个可执行文件,但我无法使用bazel获得相同的输出 我的生成文件: cc_library( name="mylib", srcs = ["lib/mylib.a"], ) cc_binary( name="main", srcs = ["main.cc", "include/add.h", "i

Bazel在使用maven_jar规则时无法构建项目

我进行了一些重构,以便从我的工作区文件中调用此设置函数: load("@io_bazel_rules_kotlin//kotlin:kotlin.bzl", "kotlin_repositories", "kt_register_toolchains") load("@build_bazel_rules_swift//swift:repositories.bzl", "swift_rules_dependencies") load("@build_bazel_rules_apple//apple

Bazel适用于带有“a”的包装;引导->;配置->;制造;建造?

我正在尝试在Bazel构建中使用和扩展。这些库的构建过程似乎是: ./bootstrap mkdir build cd build ../configure make 在更经典的configure&&make工作流中,这是一个我以前从未见过的细微变化 有没有人能在Bazel的领导下建立这样一个图书馆? 有谁有我可以借鉴的公开例子吗? 我发现最接近于支持这一点的是,它似乎没有引导步骤的概念。即使是黑客攻击,它似乎也不起作用,因为引导程序脚本最终失败: mkdir: cannot creat

在不修改项目/工作空间的情况下配置bazel工具链

我有一个Bazel项目(新的tcmalloc),我正试图集成到一个典型的GNU Make项目中,该项目使用自己的编译器/libc++构建。我们的目标是不让上游项目分岔 如果我正确地把所有C++选项传递给BAZEL(一组代码是“代码> -NoSTDIMC++-I ”),Bazel是UpHyth包含路径(/home /vLoVix/MyPosi/DePS/TooScLoCyB++/Buto/IsCype)引用执行根外的路径。< /C>(TCMOLLC是Git子模块兄弟[@代码> DEPS/TCMal

我如何告诉Bazel Python.h住在哪里?

我正在构建一个C++可执行文件,它需要从用户的Python安装中包含“Python .h”。 为了在Bazel中表达Python.h(以及它包含的各种头文件),我需要知道Python include目录在哪里。这个位置在Windows和Linux上会有所不同,我想要一个单一的Bazel配置来构建它们 引用存在于工作区根目录之外的软件的最佳Bazel实践是什么?因此,要告诉Bazel有关外部依赖项,您需要使用其中一个来指定外部依赖项的位置,以及Bazel与该外部依赖项一起使用的构建文件 要使某些东

用Bazel运行Checker框架

考虑这个github存储库 它包括一个示例X.java文件,该文件公然违反了@Nonnull注释的规则 import javax.annotation.Nonnull; public class X { public static void main(String[] args) { new X().exec(); } public void exec() { System.out.println(this.method());

如何使用bazel查询确定目标的绝对路径?

问题: 是否有任何方法可以使用bazel query或aspects来识别bazel在包路径的何处拾取包?类似于which命令的内容 文档建议使用——show_package_location。但是,已弃用且不再受支持的,请参阅。此外,我尝试使用它并没有发现多少有用的信息。我尝试了bazel查询//some/target/--输出标签\u种类-显示\u包\u位置以及使用bazel build的其他排列,并且它不会向控制台输出添加任何不同的输出 动机 在我的包路径上有两个不同的目录用于获取、查询和

为什么bazel没有从外部接收我的标题?

我在执行bazel构建时遇到问题//MyPackage:MyTarget fatal error: tls.h: No such file or directory #include <tls.h> 此外,标题本身肯定会被拾取: bazel query 'labels(hdrs, @libressl//install:hdrs)' @libressl//install:include/tls.h 这是目标: cc_library( name = "MyTarget",

Bazel 巴泽尔内高山集装箱问题

我正试图使用各种通用发行版,在各种GNU/Linux发行版上使用基于Bazel的构建系统,测试google/或tools的构建 在“docker build”时,尝试在基于Alpine:edge的Dockerfile中使用bazel时(即在RUN cmd中) 我的Archlinux和Github操作工作流运行程序(Ubuntu18.04 IIRC)之间没有一致性构建 Dockerfile: 我使用google/或tools/bazel中的Makefile targetalpine_build运行

如何列出bazel规则的输出组?

发件人: cc_库生成多个输出,这些输出由输出组分隔。如果只想获取.so输出,可以将文件组与动态库输出组一起使用 我在哪里可以找到由cc_library生成的所有输出组的列表?更一般地说,如何列出bazel规则的所有输出组?这不是文档的替代品,但可以使用以下方法获得目标的输出组: defs.bzl: def _output_group_query_aspect_impl(target, ctx): for og in target.output_groups: print("outp

如何在bazel中包含标准路径

在我的项目中,我想使用一些通过Mac上的自制程序安装的命令。不幸的是,当我通过bazel运行命令时,它没有包括我修改过的类路径。如何在命令行参数和配置最少的情况下启用这样的路径?有一个--action_env标志,允许指定环境变量。请参阅此处的更多信息:有一个--action_env标志,允许指定环境变量。请参阅此处的更多信息:

如何在bazel中获取目标目录

我有一个生成一些输出文件的genrule,但是我使用的工具需要知道文件放在哪里 到目前为止,我已经能够使用dirname$(location outputfile),但这似乎是一个非常脆弱的解决方案您可以在genrule中了解哪些make变量可用: 特别是: @D:输出目录。如果out中只有一个文件名,则 展开到包含该文件的目录。如果有多个 文件名,此变量将扩展到包的根 genfiles树中的目录,即使所有生成的文件都属于 到同一个子目录!如果genrule需要生成临时 中间文件(可能是使用其

需要使用Bazel+;交叉编译nsync的帮助吗;利纳罗

我试图使用Bazel进行交叉编译,并遇到与中描述的完全相同的错误,即: .///platform/c++11/platform.h:29:17: fatal error: mutex: No such file or directory 发布该问题的人似乎与我是同一个人,但他们对根本原因得出了截然不同的结论(即,他们声称这是由于键入错误的包含路径导致的用户错误)。在我的例子中,所有路径都是正确的,但它们被nsync的构建忽略/覆盖。我真的需要一些帮助来弄清楚需要做哪些更改才能使用Linaro工

Bazel 如何从下载的jar中提取资源

我想从jar中提取一些特定的资源(反过来,它作为http存档的一部分被下载),虽然我知道如何在原则上实现这一点,但我不知道实现这一点的最时髦和最简单的方法是什么 我曾经天真地尝试(在阅读了答案之后)这样做: new_http_archive( name="some_jar_contents", url="@some_archive//:lib/some_jar.jar", build_file_content=""" filegroup(

Bazel:地图集(文件)->;设定(目标)

根据, 将告诉我哪个targetbar.java属于哪个 如何获取多个文件所属的目标集?即地图集(文件)->地图集(目标)。我可以用串行方式完成,但每次bazel调用都相当昂贵且缓慢——我想在一次调用中完成 上下文:我想这样做(构建与一些文件相关的目标): 我觉得这个功能一定已经存在,但我还没有找到它。使用query可以工作,但您也可以使用aquery来获得更直接的方法。 构建: genrule( name=“gen1”, srcs=[“a”], outs=[“gen1.out”], cmd=

检测bazel中的NVCC版本

我想在bazel中检测系统中安装了哪个版本的nvcc,并根据版本设置特定的标志。实现这一目标的最佳方式是什么?我对BAZEL构建系统很新。 我们最近推出了云雀远程存储库,这就是我们如何为C++自动配置,所以我想这是实现这一目标的最佳方法。看

Bazel 为pkg_deb的“包”和“架构”属性选择不同的值

我正在使用pkg_deb为不同的目标平台构建debian包。我希望在构建文件中使用相同的目标来实现这一点,但attributes包和架构不能使用select,因为它们在规则本身的outputs属性中使用 是否有其他方法可以配置包和体系结构属性?我也提到了这个问题。我认为问题在于如何在宏中使用架构,而不是在规则中进行扩展。我已经打开了一个,但不清楚这会如何与兼容性约束相互作用。我也遇到了这个问题。我认为问题在于如何在宏中使用架构,而不是在规则中进行扩展。我打开了一个,但不清楚这会如何与兼容性约束相

bazel如何选择python版本?

我正在运行一个带有bazel run xxx的python二进制目标,在目标中我正在执行print(sys.version)。这将输出Python版本3.6.8(默认值为2019年1月14日11:02:34) 当我直接键入python命令时,我得到python3.7.3(默认值,2019年4月3日,19:16:38) bazel为什么/如何选择不同的python版本?bazel将根据构建的配置选择不同的python版本。如果不重写任何内容,bazel将使用其默认的python版本。在运行baze

如何完全禁用所有bazel规则的远程缓存?

我的网络很慢。我不想使用远程缓存。 是否有任何标志阻止使用远程缓存 在.bazelrc文件中查找-remote_缓存 评论出来 在.bazelrc文件中查找-remote_缓存 评论出来 -noremote\u accept\u缓存选项似乎对我有效-noremote\u accept\u缓存选项似乎对我有效 build --remote_cache=http://replace-with-your.host:port

我应该使用专用的bazel构建文件进行测试吗?

在一些子文件夹tests中定义项目的所有测试目标是否有任何bazel约定,使用它自己的BUILD文件。这种布局是否比一个将所有内容组合在一个位置的主构建文件更可取:bin、lib和tests 一体式生成文件可能会很长,但它有使用包内同级目标引用的好处,即“:siblingTarget”引用。简短回答:是 为什么要将测试与实现结合起来?您应该始终尝试减少代码不同部分之间的依赖关系。这使它更容易理解。另见 您可以找到一些包含实现和测试规则的构建文件(例如cc\u库,cc\u二进制,cc\u测试)。假

bazel存储库_规则未执行

我有这个工作区文件 workspace(name = "libedgetpu") load(":workspace.bzl", "libedgetpu_dependencies") libedgetpu_dependencies() load("@org_tensorflow//tensorflow:workspace.bzl", "tf_workspace") tf_workspace(tf

如何在Bazel中编写java测试的扩展规则?

我现在想的是创建一个AllTest,并用junit运行它。但是,我并不满意。我希望这个规则可以创建和代码库中创建的java测试文件一样多的测试 def junit_suite_test(name, srcs, deps, size="small", resources=[], classpath_resources=[], jvm_flags=[], tags=[], data=[]): tests = [] package = PACKAGE_NAME.replace("src/test/ja

定制C++;使用cc_公共API的规则 我试图编写自定义规则来使用CcUng+API编写C++代码。以下是我当前的实现尝试: load("@bazel_tools//tools/cpp:toolchain_utils.bzl", "find_cpp_toolchain") load("@bazel_tools//tools/build_defs/cc:action_names.bzl", "C_COMPILE_ACTION_NAME") def _impl(ctx): cc_toolchain = find_cpp_toolchain(ctx) feature_configuration = cc_common.configure_features( cc_toolchain = cc_toolchain, unsupported_features = ctx.disabled_features, ) compiler = cc_common.get_tool_for_action( feature_configuration=feature_configuration, action_name=C_COMPILE_ACTION_NAME ) compile_variables = cc_common.create_compile_variables( feature_configuration = feature_configuration, cc_toolchain = cc_toolchain, ) compiler_options = cc_common.get_memory_inefficient_command_line( feature_configuration = feature_configuration, action_name = C_COMPILE_ACTION_NAME, variables = compile_variables, ) outfile = ctx.actions.declare_file("test.o") args = ctx.actions.args() args.add_all(compiler_options) ctx.actions.run( outputs = [outfile], inputs = ctx.files.srcs, executable = compiler, arguments = [args], ) return [DefaultInfo(files = depset([outfile]))]

但是,此操作失败,错误为“execvp(外部/本地\u配置\u cc/wrapped\u clang,…”:没有这样的文件或目录。我假设这是因为get\u tool\u for\u action返回一个表示路径的字符串,而不是文件对象,因此Bazel不会将wrapped\u clang添加到沙箱中。在禁用沙箱的情况下执行规则似乎证实了这一点,因为它已成功完成 有没有办法在不禁用沙箱的情况下实现此自定义规则 如果使用ctx.actions.run\u shell可以将与工具链关联的文件添加到输入中

Bazel 预编译静态库/MT和/MTd错误

错误: 链接:警告LNK4098:defaultlib'LIBCMTD'与其他lib的使用冲突;使用/NODEFAULTLIB:library 我试图依靠利伯纳: 使用以下Bazel配置: # WORKSPACE new_local_repository( name = "org_libsodium_sodium", build_file = "third_party/sodium.BUILD", path = "third_party/sodium", ) 对于Win

bazel理论上允许在bazel构建规则中使用http请求吗?

是否有可能在starlarkbuild规则中编写http请求,或者通过ctx.actions.run调用的一些可执行文件编写http请求 我知道它可以通过bazeltest(内部测试运行程序)来完成,但是它可以在构建阶段完成吗?我知道这不利于网络沙箱(但假设我们将其关闭)您可以设置为包含 一些注意事项: 网络请求仅在操作中,不能从Starlark本身运行 如果远程信息已更改,Bazel将不知道重新运行依赖于网络请求的操作。需要有一种方法使操作始终运行,但尚未决定: 您可以设置为包含 一些注意事

Bazel查询除源文件外的所有类型,即反向类型搜索

我运行了一个bazeldeps查询,其输出配置为--output label\u kind,发现大量源文件点击。是否有从结果中排除源文件的机制,某种反向搜索保留除源类型以外的所有类型?我在想象可能是这样的 bazel query "kind( ! source , deps(...))" 我在一个应用程序中使用的标签上做了一个快速值计数表,发现大部分DEP只是源文件 > bazel query "deps(//my_package/my_subpackage:my_target_app)

Bazel 我们如何处理;将工件打包到uber jar中的功能,包括其依赖项和着色功能;在巴泽尔

当我们使用maven时,这个任务可以通过maven着色插件轻松解决。但是对于bazel,我们如何处理这个问题呢?bazel现在不处理多个jar版本,将来可能也不会,因为这被认为是一种不好的做法。Bazel考虑在类路径上找到的jar的第一个版本。解决方法是使用重新打包一个(或多个)库版本,并将其用作依赖项 我想你会发现这个存储库很有用。它提供了一个易于使用的规则来操作jarjar。您能更清楚地解释一下您想要实现什么吗?理想情况下,告诉我们问题是什么,而不是其他构建系统如何解决它。我在问bazel如

如何让Bazel、ccache和沙箱协同工作(ccache只读文件系统) 我试图在FEDORA 28上使用BZEL0.16.1安装一个C++应用程序,通过COPR和CACHAC3.4.2通过DNF安装。我使用默认的cc_二进制和cc_库规则。当我运行bazel build命令时,ccache会出现以下错误: ccache: error: Failed to create temporary file for /home/mwalker/.ccache/tmp/time.stdout: Read-only file system

当我使用——verbose\u failures--sandbox\u debug构建时,我可以看到我们没有挂载ccache tmp目录r/w 那么,如何让bazel挂载我的ccache目录r/w,或者如何通过bazel告诉ccache我的工作区的正确缓存目录所在的位置 当我在Ubuntu18.04上运行相同的命令时,它成功了,所以这让我相信ccache在某种程度上是受支持的 我的部分问题似乎是ccache将其编译器驱动程序安装为gcc。例如,哪个gcc->/usr/lib64/ccache/g

Bazel:构建片段需要根据目标操作系统的不同而有所不同

我在构建文件中有类似的内容。我正在根据操作系统取消/注释行。有没有一种优雅的方式可以做到这一点 # Ubuntu #shared_libraries = [ # "libboost_atomic.so" #], # OSX shared_libraries = [ "libboost_atomic.dylib" ], 我还没有尝试过这种方法,但是通过包装本机二进制文件并查询其API来使用这种方法 (使用运行node.

上一页   1   2   3    4   5   6  ... 下一页 最后一页 共 14 页