繁体   English   中英

包含Bazel下载的文件http_file

Include file downloaded by Bazel http_file

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

我正在使用Bazel构建我的项目。 我想使用单头测试框架Catch v2 我决定使用http_file规则使Bazel下载catch标头。 我的WORKSPACE文件如下所示:

load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_file")

http_file(
  name = "catch",
  downloaded_file_path = "catch.hpp",
  sha256 = "cc6cc272cf84d8e10fb28f66f52584dedbb80d1234aae69e6a1027af4f31ae6f",
  urls = ["https://github.com/catchorg/Catch2/releases/download/v2.4.2/catch.hpp"],
)

根据文档,测试取决于生成的软件包,如下所示:

cc_test(
  name = "my_test",
  srcs = ["@catch//file", "my_test.cc"]
)

测试文件my_test.cc不能再简单了:

#include "catch.hpp"

但是,出现以下错误:

$ bazel test --config=opt -s //...
WARNING: [...]/BUILD:25:10: in srcs attribute of cc_test rule //test:my_test: please do not import '@catch//file:catch.hpp' directly. You should either move the file to this package or depend on an appropriate rule there
SUBCOMMAND: # //test:my_test [action 'Compiling test/my_test.cc']
(cd [...] && \
  exec env - [...] \
  /usr/bin/gcc
 -U_FORTIFY_SOURCE -fstack-protector -Wall -B/usr/bin -B/usr/bin -Wunused-but-set-parameter -Wno-free-nonheap-object -fno-omit-frame-pointer '-std=c++0x' -MD -MF [...].d '-frandom-seed=[...].o' -fPIC
 -iquote .
 -iquote bazel-out/k8-fastbuild/genfiles
 -iquote bazel-out/k8-fastbuild/bin
 -iquote external/bazel_tools
 -iquote bazel-out/k8-fastbuild/genfiles/external/bazel_tools
 -iquote bazel-out/k8-fastbuild/bin/external/bazel_tools
 -fno-canonical-system-headers -Wno-builtin-macro-redefined '-D__DATE__="redacted"' '-D__TIMESTAMP__="redacted"' '-D__TIME__="redacted"' -c test/my_test.cc
 -o [...].o)
ERROR: [...]/BUILD:23:1: C++ compilation of rule '//test:my_test' failed (Exit 1)
test/my_test.cc:1:28: fatal error: catch.hpp: No such file or directory
compilation terminated.
[...]
FAILED: Build did NOT complete successfully

创建cc_library包装器或包含catch/catch.hpp ,catch / file / catch.hpp会产生相同的错误。

1 个回复

默认情况下, http_file下载的文件可以包含为:

#include "external/<name>/file/<file_name>"

在这种情况下:

#include "external/catch/file/catch.hpp"

但是,此包含路径很难看,应该用cc_library包装。 此外,为每个测试编译完整的catch头文件将使构建变慢。 根据catch文档 ,catch标头的实现部分应单独编译。 像这样:

测试/ BUILD:

cc_library(
  name = "catch",
  hdrs = ["@catch//file"],
  srcs = ["catch.cpp"],
  visibility = ["//visibility:public"],
  strip_include_prefix = "/external/catch/file",
  include_prefix = "catch",
  linkstatic = True,   # otherwise main() will could end up in a .so
)

cc_test(
  name = "my_test",
  deps = ["//test:catch"],
  srcs = ["my_test.cc"],
)

测试/ catch.cpp:

#define CATCH_CONFIG_MAIN
#include "catch/catch.hpp"

测试/ my_test.cc:

#include "catch/catch.hpp"

TEST_CASE("my_test", "[main]") { /* ... */ }

如果只更改catch.cpp将不会重新编译my_test.cc ,从而节省了宝贵的时间。

1 Bazel 的 http_file 的调试认证

我想通过 HTTP 在 Bazel 中获取一些数据。 有一个http_file 方法看起来像我想要的。 我从中获取的远程服务器使用身份验证,因此我将其编写为 当我尝试构建时,我得到 警告:从https://example.com/data.0.1.2下载失败:class com.google ...

2020-09-09 01:35:10 1 203   bazel
2 如何从 BUILD 文件下载 Bazel 中的文件?

有没有办法直接从 BUILD 文件下载 Bazel 中的文件? 我知道我可能可以使用wget并启用网络,但我正在寻找一种可以与bazel fetch一起使用的解决方案。 我有一堆文件要下载,这些文件只会被一个包消耗。 使用标准方法在WORKSPACE中的 monorepo 根添加http_file ...

3 html文件使用file:///加载,但不包含http://

我有一个HTML文件,其中包含广告代码。 使用file:///full/path/file.html打开时,广告加载正常,但是当我在实时环境中托管相同文件并使用http://example.com/file.html访问时,广告不会加载。 我检查了文件生成的网络流量,并发现某些网络调用使用f ...

4 Bazel尝试下载以哈希命名的文件

我在构建bazel时收到警告: 我不在乎为什么无法下载此文件。 (我知道为什么) 但是我的问题是:这是什么文件? 这是为了什么 以及为什么其名称被散列? ...

2019-09-02 14:03:31 1 22   bazel
7 如何使用Bazel通过HTTP(S)上传任意文件?

我正在尝试将Bazel生成的一些文件(tarball和一些平面文件)上传到Artifactory。 这些不是特别打包的文件,因此没有我可以使用/查找的任何包含的规则(例如,maven)。 我目前用来构建tarball的内容: filegroup( name = "pipeline_hel ...

2019-05-15 20:31:10 0 166   bazel
8 如何找到多个bazel目标中包含的所有源文件?

在我的代码库中,将相同的源文件包含在多个目标( cc_binary , cc_library等)中通常是一个错误。 我想检测一下。 我可以 获取单个目标的来源列表。 通过对每个目标执行此操作并检测哪些源文件在多个目标中,就足以找出哪些源是多个目标的一部分。 但是我仍然需要查询 ...

2018-06-13 19:56:31 1 234   bazel
9 如何使用 Bazel 包含已构建的静态库(.a 文件)?

我正在尝试使用 Bazel 包含一个小型静态库,但无论我尝试过哪种方法,我似乎都遇到了错误。 静态库是我自己建的,真的很简单。 在另一个 .cc 文件中,我只是从这个库中调用了三个函数。 虽然我可以使用 Makefile 构建可执行文件,但我无法使用 bazel 获得相同的输出。 我的构建文件: ...

2018-10-03 21:21:04 1 2067   bazel
10 Bazel:在container_image中包含运行文件

使用container_image规则创建Docker映像时,映像中不存在必需的运行文件。 pkg_tar规则也是如此,这似乎是问题所在。 使用以下BUILD文件,我希望sh_binary tool_b出现在tool_a的运行文件中 。 但是,该图像仅包含tool_a.sh和to ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2022 STACKOOM.COM