我们的Bazel build抱怨
ERROR: XXX/BUILD:5:1: undeclared inclusion(s) in rule 'YYY':
this rule is missing dependency declarations for the following files included by 'ZZZ.c':
'/usr/lib/gcc/x86_64-linux-gnu/6/include/stddef.h'
'/usr/lib/gcc/x86_64-linux-
Google Bazel构建工具可以很容易地解释特定目录树中的每个CoffeeScript文件都需要编译为相应的输出JavaScript文件:
[genrule(
name = 'compile-' + f,
srcs = [f],
outs = [f.replace('src/', 'static/').replace('.coffee', '.js')],
cmd = 'coffee --compile --map --output $$(dirname $@
Google Bazel构建工具可以很容易地解释特定目录树中的每个CoffeeScript文件都需要编译为相应的输出JavaScript文件:
# Runs "coffee" 100 times if there are 100 files:
# will run slowly if most of them need rebuilding.
[genrule(
name = 'compile-' + f,
srcs = [f],
outs = [f.replace('src/',
如何为maven\u aar规则指定maven存储库?似乎maven\u aar无法识别我的maven\u服务器:
maven_server(
name = "default",
url = "http://xxx"
)
多谢各位 它使用常规的maven构造,而不是maven_服务器。
从本期已发行的()开始:
“…maven_服务器规则仅适用于本机maven_jar规则。我们对skylark maven_jar和mane_aar规则进行了不同的修改。相反,它使用标准的mave
我正在尝试用Bazel构建和打包。这适用于“构建”部分,但最终结果是外部使用者无法使用库(即“包”失败,因为包已损坏)
LCM使用glib,我使用()导入它。更具体地说,LCM在内部使用glib,但不向用户公开。这意味着消费者不需要把油嘴滑舌联系起来liblcm。因此应该做到这一点,消费者只需要链接到LCM本身
这一切都适用于上游(它使用CMake并做正确的事情)。然而,出于某种未知的原因,Bazel似乎并没有将liblcm与glib联系起来。如果我在相同的总体环境中使用Bazel构建一个可执行
我正在使用Bazel0.24.0构建一个现有的bzazel项目。
阅读bazel文档后,我将“PACKAGE_NAME”更改为“PACKAGE_NAME()”。
下面的问题显示
“名称‘package_name’未定义(您的意思是‘package_name’?)”
此外,“PACKAGE_NAME”显示错误,不起作用:
值“PACKAGE_NAME”已被删除,取而代之的是“PACKAGE_NAME()”,请使用后者()
A有解决方案吗?您必须使用本机.package\u name(),而不是pa
我想通过bazel查询所有gtest案例
参数“-gtest_filter”只能与“bazel test”cmd一起使用
我尝试使用“bazel query bazel query//xxx:all”,但它会显示构建文件中定义的测试列表,我想从xxx.cc文件中获取案例列表。这不是bazel query可以完成的工作。查询对目标的图形结构进行操作。Bazel的一个基本设计决策是,仅通过查看BUILD文件和它们所依赖的.bzl文件即可计算此图。特别是,不允许解析源文件
(指向--test_filt
假设你有:
$ bazel query "filter('_image_publish$', attr(generator_function, go_server_v1, ...))"
//helloworld/server:zurigo_server_image_publish
//bababot:bababot_server_image_publish
是否可以创建规则或宏,让我执行单个bazel构建构建所有上述目标
我想做:
$ bazel build :all-servers
它将
我有一个现有的项目是用Maven构建的。它通常定义几个模块。我想将此项目迁移到Bazel
在第一次尝试中,我使用
└── project
├── moduleA
│ ├── BUILD
│ ├── pom.xml
│ └── src
│ ├── main
│ │ └── java
│ └── test
│ ├── data
│ └──
我想制定不依赖于Bash的Bazel规则
我看到在genrule中,可以使用cmd_bat代替cmd(需要bash)。但是我如何定义规则,以便有一个cmd属性和一个cmd_bat属性,并且在Windows上只使用cmd_bat,而在其他任何地方都使用cmd?在Bazel 3.2.0cmd_bat中,仅在Windows上考虑。在其他操作系统中,它只是被忽略cmd_bat的优先级高于Bazel 3.2.0中的cmd,cmd_bat仅在Windows上考虑。在其他操作系统中,它只是被忽略cmd\u b
我想用Bazel建立我的jsonnet。为此,我使用了jsonnet规则。不幸的是,在我的构建管道中,我无法从github中提取。所以,我一直在阅读脱机构建,但似乎找不到有效的解决方案。我已经提取了jsonnet规则repo,并尝试使用
$ bazel test //project ----distdir=<jsonnet_rules_repo>
$bazel test//project----distdir=
但这不起作用。所以,我想知道是否有人知道正确的处理方法
更新:
这是
我的项目中有不同的模块,它们以JSON的形式生成配置文件,JSON是java_libarary的一部分。我需要使用bazel build将生成的JSON文件复制到一个新模块。我想这样做是因为:
从bazel读取所有依赖项(假设所有模块
生成json将作为依赖项添加)
在依赖关系中逐个提取JAR文件
将json复制到新位置
包将json复制到新tar作为输出
我不确定,我如何能在bazel做到这一点,让我知道,如果有任何一个类似的例子可用
提前感谢…我正在使用genrule实现以下功能:
在jav
我正在处理一个问题,在这个问题中,如果指定了某个Bazel配置(通过'--config'),我只想创建一个特定的规则。我们从0.11开始使用Bazel,并且有一系列构建基础设施,这些基础设施可以绕过Bazel中以前的限制。我正在逐步地将我们移植到更新的版本。缺少的一个特性是编译器转换,因此我们使用配置和一些外部脚本实现了自己的功能
我解决问题的第一次尝试如下所示:
load("@rules_cc//cc:defs.bzl", "cc_library")
从git加载代码,运行sh compile.sh,然后
错误如下所示:
INFO: You can skip this first step by providing a path to the bazel binary as second argument:
INFO: compile.sh compile /path/to/bazel
Building Bazel from scratch......
Building Bazel with Bazel.
WARNING: /sear
我试图从.bzl规则中获取完整当前目录路径的值。我尝试过以下方法:
ctx.host\u配置。默认shell\u环境路径返回“/Users/[user\u name]/.rbenv/shimmers:/usr/local/bin:/usr/bin:/bin:…
ctx.bin_dir.path返回bazel out/local fastbuild/bin
pwd=ctx.expand\u make\u variables(“cmd”、“$$pwd”、{})返回字符串$pwd-我认为这条规则对我没
如果我有一个文件列表,例如foo/src/main.cpp、foo/src/bar.cpp、foo/README.md是否可以确定哪些文件是bazel包的一部分?
在我的示例中,由于README.md不是构建的一部分,因此输出可能是foo/src/main.cpp、foo/src/bar.cpp
一种方法是对每个文件调用bazel query,看看它是否会产生输出,但这非常低效,因此我想知道是否有更简单的方法
背景:我试图确定一组文件中的更改是否对目标有影响,我想使用bazel query so
我正试图制定一个规则,使我的所有代码(我在这个项目中使用的每种语言)都可以lint。
但我很难做到这一点
正如我所说的,我脑海中对整个项目进行lint的最佳想法是创建一个lint规则,并将每个lint规则都放在其中(eslint用于js&ts,golang/lint用于go等等)
以下是我目前的规则:
#/:rules/lint.bzl
加载(“@npm//eslint:index.bzl”,“eslint”)
def_lint(ctx):
#js/ts
埃斯林特(
name=“eslint”,
bazel构建--配置cxx20--配置选项…
我希望默认设置为--config cxx20--config opts。但是,我无法更改.bazelrc,因为其他用户使用不同的配置。是否有类似于BAZEL_cxopts的配置环境变量
export BAZEL_254;?=“--config cx20--config opts”通常的解决方案是创建一个 .BZELRC。用户< /C>文件并添加一个行尝试导入%%工作区%./BZELRC。用户< /C> >到您的 BZELRC 文件。 < p>您可以
在我的项目中,我们有一些代码,当编译静态链接时,必须在编译代码时添加一个define。让我们假设它是-DSTATIC_编译
我的问题是:在请求静态链接或任何基于链接绑定的编译标志时,是否可以控制编译标志
认为我知道我能做到:
将--copt'-DSTATIC_COMPILATION'添加到命令行bazel build
通过传递bazel build--config=static\u comp,配置一个可以提供这种配置的bazelrc文件,这很好,但我不确定当将此包作为外部包时它是否会传递给其他包
我需要编写一个Bazel存储库规则,根据现有库中存在的一些逻辑下载mysql二进制文件(它还做其他事情)
我正在考虑启动一个持久性jvm工作程序的选项,它将托管这个库,并要求它在某个地方下载归档文件,避免代码重复
我的问题是:
1.我需要做些什么才能与坚持不懈的员工一起工作?未找到教程。
2.我可以告诉工作人员将归档文件下载到哪个正确(bazel-wise)位置
请随时告诉我,您认为我将此任务委托给工作人员是犯了一个可怕的错误:)您无法轻松地从存储库规则与持久工作人员交谈,但我认为这不是您想要的
我们目前的项目结构如下:
thirdparty(ws_root)
|_WORKSPACE
|_comp1
| |_BUILD
| |_src
| |_ a.c
| |_include
| |_ a.h
|_comp2
| |_BUILD
| |_src
| |_ b.c
| |_include
|
我使用java_image创建了一个映像,但我想将参数传递给我的主函数(即字符串args[])。当我使用“bazel run name_of_image”命令时,我如何做到这一点 bazel运行//您的:规则--arg1 arg2。。。argN
--之后的所有内容都会传递到二进制文件。使用java\u image时,bazel run//my\u image只会将映像加载到Docker守护进程中,而不会运行它。要运行它,您应该使用:
docker run bazel/my_image:my_im
我写了一个例子:
git clone git@github.com:rynz/test-app.git
bazel test //...
它将出错,抱怨com_google_absl无法解决
编辑工作区并取消注释com_google_absl依赖项,现在它将成功构建和测试
rynz_应用程序仅依赖于rynz_协议,但rynz_协议也依赖于com_google_absl。为什么我必须在rynz_应用程序工作区中重新声明com_google_absl,而它已经在rynz_协议工作区中声明了
亲切问
我正在尝试运行一个Bazel构建,它使用rules_foreign_cc的cmake_external规则。我的理解是,通过将适当的参数传递给rules_foreign_cc_dependencies(…)workspace函数,我可以指示构建使用预构建版本的cmake,而不是使用本地安装在构建服务器上的cmake
我尝试过以下方法,但没有效果:
rules_foreign_cc_dependencies(
["//:built_cmake_toolchain"],
False,
是否有任何工具可用于内省Bazel构建文件集合,以便对代码库运行查询?我正在考虑一个简单的案例,收集代码库中使用的所有已定义标记。某种bazel元查询功能,它可以让我通过大量的构建文件在repo中确定约定和用法
能够根据它们的集合标记对cc\u test和py\u test规则进行交叉制表,这将是一件好事。理想情况下,应该有一个python客户端来内省bazel文件。bazel query使用一种高度表达的查询语言提供有关目标依赖关系图的信息。它可以输出为各种格式,如点、XML、Protobuf
从maven下载依赖项的推荐方法是什么。目前有三种方法可以做到这一点(不推荐使用mvn_jar)。未来的maven\u安装()还是jvm\u导入\u外部()?这里是规则\u jvm\u外部的作者
无论是jvm import还是outernal和maven\u install都是获取maven工件的有效和受支持的方法。它们还提供不同的用例和样式:jvm\u import\u external不进行可传递的依赖项解析,因此如果您不希望使用maven\u install,可以将其用于更细粒度的工件处理
是否可以从命令行传递docker图像标记,如:
bazel run :myimage_push --tag=foo_tag
这样效果就相当于
container_push(
name = "myimage_push",
format = "Docker",
image = ":myimage",
registry = "some.registry",
repository = "some/repository",
tag = "foo_tag",
)
你可以这样说:
我们的Bazel项目从GitHub上托管的私有Git存储库中提取代码
在某些环境中(碰巧都是macOS),我们希望使用SSH身份验证来访问repo。因此,对于这些环境,我们可以指定remote=git@github.com:orgname/reponame.git在new\u git\u repository规则中
在其他环境中(碰巧都是Linux),我们希望使用令牌身份验证通过HTTPS访问repo。对于这些环境,我们可以使用remote=https://github.com/orgname/
如果使用grep运行此命令,我可以从maven存储库中检索项目所需的依赖项列表
bazel query "deps(//my-project-server)" | grep "@maven"
我将获得每个依赖项的输出列表,如下所示:
@maven//:com_thoughtworks_paranamer_paranamer
@maven//:v1/https/repo.maven.apache.org/maven2/com/thoughtworks/pa
在尝试构建使用bazel的git repo时,我遇到了一个错误,即//external:android/sdk没有绑定到任何东西,我无法找到该配置的位置,因此我可以修复它
我已经加载了一个新的ubuntu 14.04,我正试图从源代码构建github.com/google/shipshape。我已经按照给出的说明安装了构建它所需的一切
基本上安装了golang、openjdk-8-jdk、openjdk-8-source、bazel,并运行了以下程序:
mkdir -p github.com/g
这是我的构建文件:
cc_binary(
name = "mnistpredict_keras",
srcs = ["mnist_keras.cc", "MNIST.h"],
deps = [
"//tensorflow/core:tensorflow",
],
)
当我尝试运行$bazel build:mnistpredict\u keras时,我得到错误:
ERROR: /home/saubin/git/tf-keras-speed-test
我有一个非常简单的cc_library()规则,我想将其转换为Skylark规则
cc\u library()规则是:
cc_library(
name = 'cc_library_a',
srcs = [ 'a.c' ],
)
我面临的挑战是涉及通过不同方法传递的编译标志,例如命令行。
因此,假设我运行以下命令行:
#bazel构建:a--copt-H
这将在编译命令中添加-H标志。这里的问题是如何将-H标志传播到云雀规则
我尝试了以下方法,但无效:
def _my_rule(ctx
我正在将一个项目从cmake迁移到bazel。我有一个文件夹,其中包含一些python代码和一些genrules。
我让一个测试脚本递归地运行这个文件夹中的所有python测试。
所以基本上我需要这个文件夹下的所有py文件作为测试脚本的data。但是考虑到我需要运行一些genrule,所以有一些构建文件,glob([“***.py”])无法通过
例如,我们有一个文件夹python包含以下文件
python/BUILD
python/test\u a.py
python/folder\u a/B
我想将“foo.c”构建为一个库,然后在生成的.a文件上执行“readelf”,但不是“.a”,我如何在bazel中编写它呢
以下BUILD.bazel文件不起作用:
cc_library(
name = "foo",
srcs = ["foo.c"],
)
genrule(
name = "readelf_foo",
srcs = ["libfoo.so"],
outs = ["readelf_foo.txt"],
cmd = "readelf
iOS和OSX是在我的Mac上本地构建的(出于需要)。Android和Windows构建在Docker容器中
在构建结束时,我有一个Bazel规则,它为每个平台获取每个cc_binary规则,并将它们放在.zip中
我想利用Bazel的远程执行API在容器中构建一些二进制文件,在本地构建其他二进制文件,然后引用共享缓存将它们整理在一起——所有这些都需要一个Bazel build命令
巴泽尔支架
Bazel声称这些类型的多平台构建是可能的,其中主机(OSX x64)、执行(Linux x64)和目
标签: Bazel
failed-installation
我成功构建了bazel-0.4.0。
然后我尝试使用升级工具将其升级到最新版本bazel-0.5.1
$ ./compile.sh compile ../bazel-0.4.0/output/bazel.exe
它给了我一个错误,bazel-0.5.0,bazel-0.4.5给了我同样的错误
错误日志:
$。/compile.sh compile../bazel-0.4.0/output/bazel.exe
如果已经安装了bazel,则可以通过在的新克隆上运行bazel build//src:
我使用docker规则在bazel构建中推送图像。docker存储库使用自定义cacert。为了能够将图像上传到它,我必须创建一个自定义的cacerts.txt文件,其中包含一个额外的cacerts,该文件通过venv python2环境中带有函数get()的模块ca_certs_locater安装。这将覆盖docker规则使用的httplib2提供的默认cacerts.txt
我的问题是,在自定义的.venv环境下运行docker规则是否仍然存在?或者最好为自定义cacert提供一个附加变量
在您看来,一个项目依赖于另一个通过debian包分发的预编译项目的最佳方式是什么
自定义(新的)debian_软件包()工作区规则?事实上,我要介绍一个新的debian_软件包规则,它模仿了debian_软件包的功能
包//foo具有py二进制文件:
py_binary(
name = "foo",
srcs = ["foo.py"],
visibility = ["//visibility:public"],
)
foo.py接受2个位置命令行参数
现在,在一个包//bar中,我想创建一个“别名”,用于调用带有特定参数的foo二进制文件
遗憾的是,以下措施不起作用:
py_binary(
name = "bar",
deps = [
"//foo:foo",
],
ar
我正在尝试构建一个相对独立的发布包(假设它是一个tarball,但也可以是一个RPM/Deb),它既包含我的代码(打包到一个jar中),也包含我的代码在编译和运行时使用的jar。(假设为了简单起见,它们是相同的集合。)
我有一个MyPackage(它有一堆.java文件),假设它直接依赖于外部jar a和B,B依赖于外部jar C。我从maven_jar得到a、B和C
我已经制定了如下规则:
在MyPackage/BUILD中:
java_library(
name = "MyPacka
bazel build标志--workspace\u status\u命令支持调用脚本来检索例如存储库元数据,这也称为构建戳记,在java\u binary等规则中可用
我想使用此元数据创建一个自定义规则。
我想用它来实现一个通用的支持功能。它应该接收git版本和一些其他属性,并创建一个可用作依赖项的version.go输出文件
所以我开始了一段旅程,在各种bazel存储库中寻找规则
像Rules\u docker这样的规则支持在container\u image中使用stamp进行戳记,并允许
Bazel Starlark API对外部存储库中的文件执行奇怪的操作。我有以下Starlark片段:
print(ctx.genfiles_dir)
print(ctx.genfiles_dir.path)
print(output_filename)
ret = ctx.new_file(ctx.genfiles_dir, output_filename)
print(ret.path)
它正在创建以下输出:
DEBUG: build_defs.bz
我想使用Bazel为所有python测试生成代码覆盖率报告。目前我正在使用Bazel版本0.19.1,但不久我将升级到0.22.0。我在2017年发现了这个开放性bug,这个bug已经研究了一段时间,但是这个页面上的通信突然中断()。有人知道bazel coverage在哪里支持py_测试和py_二进制文件的代码覆盖吗
当前,当我运行命令bazel coverage//path/to/python/tests/…
(verb_py3) joshsullivan@VERB790-Linux:~/v
标签: Bazel
starlarkbazel-rules
随着我的进步,我正在写一些规则并学习Starlark
假设我有自己的提供商:
ModularResources=提供程序(
doc=“模块化资源”,
字段={
“artifactId”:“前Maven工件id(别问我为什么)”,
“SRC”:“标签列表(一个全局(..)事物)”,
},
)
def模块化资源导入(ctx):
返回源(
artifactId=ctx.attr.artifactId,
srcs=ctx.attr.srcs,
)
模块化资源=规则(
实现=\u模块化\u资源\u实施,
有一个巴泽尔相当于?我正在寻找一种工具,通过从构建文件中删除依赖项并检查项目是否仍在构建来消除bazel构建中的错误依赖项
有没有任何理由说明这种方法不起作用
由于Bazel不提供将标签映射到字符串的方法,我想知道如何通过Skylark解决这个问题
遵循我的部分可怕的解决方法
首先是静力学:
_INDEX_COUNT = 50
def _build_label_mapping():
lmap = {}
for i in range(_INDEX_COUNT):
lmap ["map_name%s" % i] = attr.string()
lmap ["map_label%s" % i] = attr
我需要为一些子项目声明特定的资源,我正在按照下面的方式进行
filegroup(
name = "some_resources",
visibility = ["//:app"],
srcs = glob([
"src/my/resources/**/*.resources",
]),
)
但是,在任何子项目中,可以找到资源的路径都是相同的。我的问题是-在这种特殊情况下,减少代码重复的最巴泽尔(巴泽尔语?)的方法是什么
基本上我想要的是
在相关子
Bazel安装说明指出Python是必需的。但是,我使用了没有Python的Linux安装程序,它似乎可以工作
BaZeL是否实际上需要Python来构建非Python构建,比如C++和Go? < P>我相信它没有,并且你成功的构建了没有Python的证明。 < P>我相信它没有,而且你成功的没有Python的构建证明了。
我在一个代码库上使用Bazel,该代码库在一个空的环境中使用SpringBoot和JUnit。以下是获取所有第三方依赖项所需运行的命令:
bazel fetch '@bazel_tools//tools/build_defs/repo:*'
bazel fetch '@rules_java//java:*'
bazel fetch '@rules_cc//cc:*'
bazel fetch @local_config_platform//...
bazel fetch @local_config
我有这样的规定
行动=规则
实现=_impl,
属性={
...
_cc_工具链:attr.labeldefault=Label@bazel_tools//工具/cpp:当前的工具链,
},
片段=[cpp],
工具链=[
@bazel_工具//工具/cpp:工具链类型,
],
我为自定义cpu定义了自定义cc_工具链:
工具链
name=cc toolchain-%{toolchain_name},
toolchain=:cc编译器-%{toolchain_name},
可以在这个平台上运行
上一页 1 2 3 4 5 6 7 8 9 ...
下一页 最后一页 共 14 页