我希望工作区的所有BUILD文件都可以访问my_package.bzl中的一组规则,而无需在BUILD文件中加载my_package.bzl。基本上,我希望包中的规则看起来像本地规则。我怎样才能做到这一点
我在想,也许有一行我可以添加到.bazelrcs或项目的工作区文件中。这可以通过在//工具/构建规则:prelude\u bazel添加prelude\u bazel文件来实现(这必须是一个包,因此tools/build\u rules必须包含build文件)。
这将被加载并添加到Bazel加
我正在尝试运行Bazelbuild/…构建我的项目。。。但是我得到了以下错误
CPTI/工作区:1:1:未定义名称“git_存储库”
这是我的工作区文件:
git_repository(
name = "org_pubref_rules_protobuf",
remote = "https://github.com/pubref/rules_protobuf",
tag = "v0.8.1",
# commit = &qu
我正在将一个cc_库链接到一个android_二进制文件,并得到一个命名问题。有人能告诉我怎么解决吗
cc\u库:
cc_library(
name = "native_library",
srcs = glob(["libs/**/*.so"])
)
libs目录的内容:
libs
├── armeabi
│ ├── libSound.so
│ ├── libSec.so
│ ├── libWatch.so
│ └── libTec.so
├── armeab
我有一个mutli模块项目,我正在从Maven迁移到Bazel。在这个迁移过程中,人们需要能够在两个构建系统上工作
在mvn干净安装之后Maven将一些BUILD文件复制到target文件夹中。
当我稍后尝试运行bazel build/…时,它认为各种目标文件夹下的构建文件是有效的包,并且由于某些不匹配而失败
我已经看到已删除的\u软件包,但如果需要,我将指定要“删除”的文件夹列表,而对于200多个模块,我无法这样做。
我正在寻找能够说bazel build/--已删除的\u包=**/targe
我要使用诸如clang format、clang tidy之类的clang工具或生成类似工具,我需要知道.bzl文件中的工作区目录。我怎样才能得到它?考虑下面的示例,在这里我只想打印工作区中所有SRC文件的完整路径:
#简单_示例。bzl
def _impl(ctx):
workspace_dir = // ---> what comes here? <---
command = "\n".join([echo %s/%s" % (workspace_dir, f.short
有一个名为“L”的cc_库目标,cc_二进制目标“a”、“B”、“C”依赖于它
库L实现了一个事务框架,包含一个长度为100的纯字符数组,数组上有很多复杂的逻辑
现在,目标B需要更大的数据大小,但目标a和C需要更小的数据大小以同时容纳更多事务
使用makefile时,一种可行的方法是在L中使用ifdef/else为长度设置不同的宏值。然后循环A、B、C,用不同的-D=A、-D=B和-D=C构建它们。因此,lib L在三个不同的二进制文件中具有不同的数组长度
有没有更好的方法来实施它?
我可以在b
我的项目结构中有多个子模块,这些基本上是文件夹,它们本身也是项目
对于给定的python项目,每个项目都有子项目。我希望能够编写一个宏,可以创建一组对给定子项目采取的操作
基本上,在工作区内,有以下内容:
load("@io_bazel_rules_python//:python/pip.bzl",
"pip_import"
)
pip_import(
name = "foo",
requirements = "@subprojectname//:requirements.t
我有一个repository_规则,它正在查询本地系统是否有一个数据库正在运行,并且是否已完全迁移
# impl
result = ctx.execute(["mysql", "-u", "root", "--protocol", "tcp", "-e", "select * from %s.flyway_schema_history" % ctx.attr.dbname])
ctx.file(
"local_checksum",
"""
Bazel为不同的编译模式(fastbuild、opt、dbg)提供了不同的输出目录,这允许它在您以调试模式编译应用程序后保持发布版本缓存的完整性。这很好
是否可以对不同的编译选项执行相同的操作
我正在制定我的第一个自定义Bazel规则。这些规则允许运行命令行测试
我已将规则定义逐字包含在下面。到目前为止,我对它很满意,但有一部分感觉非常难看和不标准。如果规则用户向规则添加了二进制依赖项,那么我会确保二进制文件出现在路径上,以便对其进行测试。目前,我通过创建一个二进制路径列表来实现这一点,然后在它们后面添加$PWD,它在脚本内部展开到完整的执行路径。这让人感觉不舒服,而且容易出错
有没有更惯用的方法?我认为我无法访问规则中的执行路径,因为直到执行阶段才创建它
谢谢你的帮助
BATS_存储
我试图在CentOs6上用EasyBuild编译tensorflow,但Bazel捕捉到了错误的binutils目录,不幸的是,这是一个硬编码的目录,以错误的汇编程序结束
如果我尝试为链接器bazel修补硬编码的“-B/usr/bin”,稍后会告诉我下面的错误
“查找%(builddir)s/-type f|grep \“cpp/CROSSTOOL\”| xargs-n 1 sed-i \“s \-B/usr/bin/|-B$EBROOTBINUTILS \”
错误:安装损坏:文件_embedd
我有两个宏/目标:组件和捆绑包(打包了几个组件)。我想扩展bundle宏以接受组件列表之外的bundle列表,并打包直接包含或包含在其中一个包含的bundle中的所有组件
例如,如果我有以下BUILD文件:
component(name = 'a')
component(name = 'b')
component(name = 'c')
component(name = 'd')
bundle(name = 'x', components = ['a'])
bundle(name = 'y',
我发现将print语句添加到我的bazel宏和规则实现中会导致控制台输出添加到构建中,例如
DEBUG: /home/$USER/repo/source.bzl:82:5: message XYZ
我甚至可以用标准的python技术来反思一些对象,比如
def my_宏(my_列表):
打印(我的列表)
打印(类型(我的清单))
打印(目录(我的列表))
调试:/home/$USER/repo/source.bzl:83:5:[“//可见性:公共”]
调试:/home/$USER/repo/s
我们的bazel构建有时会卡住并超时,所以当VM被杀死时,我们会丢失所有的构建日志。为了找到原因,我们想使用查看哪些规则开始执行,但没有完成(通常是内存占用测试)
from显示TargetConfigured和TargetCompleted事件是规则开始和结束之间的唯一事件
但实际上,bazel同时配置所有目标,因此我们不能从TargetConfigured时间中减去TargetCompleted时间
此外,这两个事件都不包含任何时间戳。以下是来自的生成事件文件(已截断):
因此,是否可以从生成
报告显示:
sum = rule(
implementation = _impl,
attrs = {
"number": attr.int(default = 1),
"deps": attr.label_list(),
},
)
有一个int和一个标签列表。但还有什么其他选择呢?哪些其他类型可以是规则属性attr.string()似乎也存在。还有什么?您可以在这里找到完整的列表:
这包括:
bool
int
int_list
labe
我已经创建了一个自定义存储库规则来从samba共享获取文件。我有一个使用此规则的工作区文件:
load('//build_tools/rules:download.bzl', 'smbget')
smbget(
name="boost_test",
path="/tools/boost/v1.61/lnx_x64/lib/libboost_atomic.so"
)
现在,我只想运行规则来检查它是否有效?
如果我运行bazel build:boost\u test它会抱怨没有这样的
我正在尝试为bazel建立一个规则,它模拟模板系统中的CMake*
这有两个挑战,第一个是生成模板输出。第二种方法是将输出同时提供给genrules、filegroups和cc.*规则。第三种方法是将依赖关系传递给进一步的下游规则
我让它在genfiles(或bazel-bin)中生成输出文件version.hpp,我可以得到包含它的初始库规则,但我似乎不知道如何创建我的cc\u二进制规则,它依赖于cc\u库和头文件模板规则来查找头文件
我有以下.bzl规则:
def\u标题\u模板\u imp
您如何看待bazel build的标准版本
我想查看bazel构建期间写入标准输出的所有日志
这些都不允许它在失败之前或之后显示ls命令
$ bazel build --show_progress --worker_verbose --verbose_failures --verbose_explanations=true -s --test_output=streamed :build
$bazel build--显示进度--工作者详细--详细失败--详细解释=true-s--测试输出=st
我有一个生成三个输出文件的代码生成器:
client.cpp
server.cpp
数据.h
genrule如下所示:
genrule(
name = 'code_gen',
tools = [ '//tools:code_gen.sh' ],
outs = [ 'client.cpp', 'server.cpp', 'data.h' ],
local = True,
cmd = '$(location //tools:code_gen.sh) $(@D)')
“clien
在Bazel中,给定构建目标,脚本(在Bazel之外运行)如何获得生成文件的路径
场景:我正在使用Bazel进行构建,完成后,我想将结果复制到服务器。我只需要知道要复制哪些文件。我可以硬编码文件列表,但我不想这样做
一个简单的示例:此Bazel脚本:
genrule(
name = "main",
srcs = ["main.in"],
outs = ["main.out"],
cmd = "cp $< $@",
)
还有:bazel-genfiles/m
我的顶级工作区如下所示:
load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive")
http_archive(name="gcc-9.2.0", build_file="BUILD.gcc-9.2.0", ...)
我的BUILD.gcc-9.2.0文件类似于:
package(default_visibility = ["//visibility:public"])
filegroup(
name =
我正在尝试将浮点运算添加到我的.bzl文件中。根据Bazel globals规范,应根据Starlark规范定义float()函数。但是,当我尝试添加float()时,出现以下错误:
错误:/home/username/code/project/foo.bzl:4:3:未定义名称“float”
还有什么我要进口的吗?我假设由于float()关键字是在全局名称空间中定义的,所以我不需要导入它。根据Bazel站点页面上的,不支持浮动,但这直接与冲突
更新:运行Bazel 3.7.1支持浮点数的Baz
我正在做一个巨大的项目,有一个巨大的bazel依赖关系图
当我运行bazel build…时,我在bazel out/中发现了许多扩展名为.srcjar.zip的文件,此外还有一百万个我不感兴趣的文件
我正在尝试创建一个bazel命令,它只构建这些.srcjar.zip文件
我研究过,但还没有找到一个演示如何查询输出文件的示例
谢谢你的帮助 我认为和查询功能的某种组合可以实现这一点:
$ bazel query 'filter('.*\.srcjar\.zip$', kind("gen
我目前正在尝试测量用不同的--spawn_策略构建“api”项目所需的bazel build//api/…时间。
我很难做到这一点,因为只要我不接触源文件,Bazel就不会重建任何东西
我能够通过编辑“api”项目中的所有文件来强制重建,但重复这样做很麻烦
强制Bazel重建以便我可以测量存储库的构建时间的最佳方法是什么
最好,我想使用类似于bazel build//api/--有些选项强制重建或类似的东西。有点脏,但您可以使用它来更改生成环境并使所有操作无效。发件人:
环境变量被认为是行动的重
我学习过。我想攻克的项目是用围棋写的。目前,如果我运行build命令,我可以看到已编译的二进制文件,但在任何地方都看不到*.pb.go文件。我希望将生成的*.pb.go文件保存在*.proto文件所在的同一文件夹中,以便我的IDE(Intellij Goland)可以找到并索引它们
你能帮我怎么做吗?如果您能告诉我如何为github.com/cgrushko/proto_library项目执行此操作,我应该能够在我的特定项目中尝试此操作。Bazel不会将生成的文件(如.pb.go)输出到源代码树
bazel能告诉我--symlink\u prefix指向哪里吗
不同的用户有不同的~/.bazelrc文件,这些文件为该标志指定了不同的值。我想在给定的工作区中查询二进制文件将被写入(或已经写入)的位置
谢谢。bazel-info-bazel-bin和bazel-info-bazel-genfiles将告诉您绝对路径。您想要实现什么?因为你在寻找这些信息,你可能在尝试做一些非保密的事情。无论如何,我认为规则无法检索到这些信息。谢谢@laszlo,是的,绝对不保密。我正在尝试将bazel构建输出
我试图使用bazel作为构建系统。
我的项目如下所示:
包含一组类和函数的静态库
使用与静态库相同代码的动态库(so/dll)(由于windows的原因,需要使用它,cc_库规则不会在windows上自动生成dll)
构建可执行文件的cc_测试规则。它包含基于google测试框架的单元测试
它可以在Windows和Linux上运行。
当尝试像这样构建Android时,测试规则失败
bazel build//unit:unit--crosstool\u top=@androidndk//:de
我想在一个封闭的环境中使用bazel,一个没有不受控制的互联网接入的环境。我想强制bazel使用本地安装的java,而不是下载。我无法找出所需的标志组合-这是我尝试的:
$ java -version
java version "1.8.0_171"
Java(TM) SE Runtime Environment (build 1.8.0_171-b11)
Java HotSpot(TM) 64-Bit Server VM (build 25.171-b11, mixed mode)
$ jav
我正在设置一个ppc64le服务器,需要在其上安装bazel 0.23.*。我为这个架构编译了bazel,但它不能正常工作
我正试图在Ubuntu 18.04 ppc64le服务器上安装一个应用程序(ONOS)。这种架构不支持它,所以我需要使用bazel从源代码构建它(正如ONOS文档所解释的)。我从已经为ppc64le体系结构编译的二进制文件中安装了bazel版本0.23.0。
现在我尝试使用bazel(bazel build onos)构建应用程序,但它显示了一个与“JDK环境”相关的错误
我想使用我的工作区中包含的netrc文件为http\u archive中的单个URL指定凭据。我尝试了以下方法,但没有成功:
我试图指定URL中的“userinfo”部分,比如http://:@host/path,只是为了得到一个身份验证错误
我已经修改了http\u archive的netrc属性,但我只能看到如何在那里使用绝对路径名;我更愿意在我的工作区中包含netrc
我必须编写自己的存储库规则还是有其他方法?看看这个名为“Readd support for authentication
我已经使用bazel build生成了一些输出文件,但是每次需要访问输出时指定bazel-bin目录的路径有点繁琐
在深度嵌套的bazel项目中,我不仅需要获得特定的存储库,/Users/username/repos/organization/folder/folder/repo,还需要添加我想要的bazel bin/folder1/folder2/folder3/folder4/binary。我更愿意说,$output/binary\u我想要。Bazel应该能够获取项目目录(当它查找工作区文件
我试图用Bazel建立一个项目。在那台机器上没有互联网连接(开放构建系统)。因此,我必须在构建之前下载所需的软件包
我尝试使用“-repository\u cache”并将从在线实例下载的文件存储在那里,但气隙系统总是尝试下载文件
还有其他方法吗?这能回答您的问题吗?不是真的或者更好:我不知道。如果我理解正确,我会打包bazel需要的所有依赖项。这已经完成,有suse包用于此。但是libedgetpu需要额外的依赖项,它在构建时从几个git回购中提取这些依赖项。这种依赖关系(tensorflow
我在win10上使用ubuntu(WSL)
bazel无法同步
我不知道怎么解决这个问题。请帮忙~~
这是一个已知的问题。看到或看到
引述:
目前,该插件仅支持Linux
我们计划在不久的将来和长期内支持Mac
窗口,但没有固定的计划日期
假设我有这样一个Bazel项目:
树。
.
├── 福
│ ├── 巴泽尔先生
│ └── foo.txt
└── 工作空间
1个目录,3个文件
foo/BUILD.bazel:
genrule(
name=“bar”,
srcs=[
“foo.txt”,
],
cmd=“cp foo.txt$@”,
出局=[
“bar.txt”,
],
)
我无法生成bazel-build//foo:bar:
bazel构建//foo:bar
...
cp:无法统计“foo.txt”:没有这样的文
我们运行叮当整洁作为一个行动的听众。它可以轻松地消耗与gcc编译一样多的CPU,如果不是更多的话
这些是从——工作计数中收取费用,还是我们必须自己为听众制定计划(例如,当“正确调整”机器/容器/任何东西的尺寸时)?是的
演示
我正在运行3个动作+3个额外动作。他们每个人都睡3秒钟,开始和结束时打印
使用--jobs=2,您可以看到leaf2和leaf3一起构建(15:10:00开始),然后是leaf1和leaf1侦听器(15:10:03),最后是leaf2侦听器和leaf3侦听器(15:10:0
我有一个宏go\u服务器,它调用go\u二进制文件。下面是一个正在使用的示例:
go_server(
name = "service",
library = ":go_default_library", # go_binary
args = [
"--respPrefix", "OH HAI",
"--port", "4040",
],
)
问题:
上面的args有一个错误:OH HAI应该转义,否则它会作为两个单独的参数传递
我有一个带有条件属性的规则:
some_rule(
name = "my_rule",
some_attr = select({
":ts_diagnostics_mode_extended": ["--extendedDiagnostics"]
}),
)
并使用配置设置:
config_setting(
name = "ts_diagnostics_mode_extended",
values = { "define": "ts_diagnostics_mo
在尝试构建时,我不断收到错误“没有这样的文件或目录myheader.h”。我是不是在做一些概念上错误的事情?我不明白为什么它找不到标题,我真的不认为我应该添加一个-Ibazel out/k8 fastbuild/genfiles/mylibrarycopts,因为路径会根据命令行参数而变化
# BUILD file
load(":size.bzl", "size")
size(
name = "blubhdrs",
infiles = [
"myheader
如何让bazel链接预编译(静态)库
我引用了一个现有的静态库项目(xy.BUILD):
cc\u库(
name=“xy”,
srcs=[“lib/x86_64/libxy.a”],
hdrs=[“include/xy.h”],
包含=[“包含”],
#linkstatic=True,cc\u库在组合成cc\u二进制之前不会链接到其依赖项中(所有内容都将链接到cc\u二进制)
没有一种优雅的方法可以强制它将所有内容链接到cc\u库中。您可以使用genrule,这样就不需要指定特定的体系结构。或者
我正在尝试在java测试中启动一个新的测试。
当我运行一个基本测试,用标签块网络启动服务器时,我得到:
mysql启动失败,错误:[错误]无法启动服务器:绑定到
unix套接字:不允许操作2017-07-24T17:58:59.952051Z 0
[错误]套接字上是否已运行另一台mysqld服务器:
/tmp/5044135838291373301.sock
当我移除标签时,一切都通过了。似乎/tmp是可写的
完全复制
这是在mac os 10.12和Bazel 0.5.2上实现的。请尝试构建一
使用bazel,我在所有BUILD.bazel文件的开头重复调用load函数
此外,现在我看到,为了测试将bazel扩展到另一种语言的代码,我需要在所有构建文件中调用一些宏函数
是否有任何方法可以在所有子包中应用自定义代码,而无需在BUILD.bazel文件中写入任何内容?您可以将load语句放入工作区中的tools/BUILD_rules/prelude_bazel文件中。例如,规则提到将以下内容添加到prelude_bazel文件中
这似乎是buildozer应该做的事情——在这里提交特性请
GAPID使用bazel,并且具有使用maven的外部依赖性。我得到这个错误:
ERROR: C:/users/pemgithub/_bazel_pemgithub/3mdmxsrc/external/gapic_third_party/BUILD.bazel:19:1: no such package '@io_grpc_context//jar': Failed to fetch Maven dependency: Could not transfer artifact io.grpc:gr
我有一个现有的bazel项目,可以通过bazel v0.5.3成功编译。由于clion插件只支持bazel 0.24.0+,因此我将bazel更新为最新版本。然而,克莱恩告诉我们
将项目加载到clion时出现“错误:评估工作区文件时出错”
是否有更新旧bazel项目的方法?提供了一个--strict和--migrate标志,可以帮助您:
USE_BAZEL_VERSION=0.24.0 bazelisk --strict build //...
--strict启用所有不兼容标志,并帮助您识别
我正在尝试为Nvidia Pegasus aarch64设置交叉编译,但无法清除此错误:
我不确定是什么问题。我是否缺少一些编译器标志或cxx内置include目录
非常感谢您的帮助和指点
.dazelrc not detected, or running in a container, starting bazel
bazelisk is installed, starting up bazel
INFO: Invocation ID: 23bd7eb6-5784-43bd-b3da-a028
每次构建完成后,我都会看到如下情况:
运行时间:1034.748s,关键路径:257.54s
想知道运行时间和关键路径之间有什么区别吗?造成时差的原因是什么
转发自:“运行时间”显示生成的墙时间,从Bazel开始运行第一个生成操作到最后一个操作完成
“关键路径”显示了构建最长的操作链所花费的时间,其中每个后续操作取决于前一个操作的输出,因此它们必须按顺序运行。关键路径是此构建的干净构建时间的下限;即使CPU拥有比Bazel曾经并行运行的操作数量更多的内核,构建仍然无法更快地完成
时间差是由Baz
我想知道是否可能使用特定于平台的默认Bazel构建标志
例如,我们希望使用--workspace\u status\u命令,但这必须是Linux上的shell脚本,并且必须指向Windows的批处理脚本
有没有一种方法可以在tools/bazel.rc文件中编写类似于
if platform=WINDOWS build: --workspace_status_command=status_command.bat
if platform=LINUX build: --workspace_statu
在我的工作区中有一个java\u binary目标,我稍后将它作为可执行文件传递给ctx.actions.run。到目前为止还不错
现在我想在Bazel执行规则时调试这个java_binary。为了附加调试器,我需要在调试模式下运行java\u二进制文件。到目前为止,我唯一想到的是在java\u二进制文件上设置jvm\u标志。我能让它发挥作用。但是我想知道是否有一种方法可以从命令行实现它,而不是将它烘焙到java\u二进制文件中
java_binary(
...
jvm_flag
我正在开发一个定制的bazel规则,我需要一个只应用于目标的属性,而不是它的依赖项。它应该与C++的LoalAlx定义相同。有人能提供一些关于如何实施它的想法吗?我需要一本字典吗
如果我将genrule输出放入cc\u库,如何将其放入私有包含路径
假设我有一个文件.c,如下所示:
#include <config.h>
#包括
下面是一个构建脚本,它说明了问题:
genrule(
name = "config",
outs = ["config.h"],
cmd = "touch $@",
)
cc_library(
name = "lib",
我有一个专用c编译器的cc_工具链配置,我使用“-s”标志确保bazel输出的编译命令是正确的
但是,除了我指定的之外,bazel还添加了三个编译标志“-MD-MF和-frandom seed”
我的编译器无法识别-MD和-MF标志。“疯狂种子”没有问题
如何指定bazel不添加这些标志?要不添加随机种子,请禁用相应功能,添加:
random_seed_feature = feature(
name = "random_seed",
enabled = Fal
上一页 1 2 3 4 5 6 ...
下一页 最后一页 共 14 页