如何将文件写入当前目录而不是bazel-out

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何将文件写入当前目录而不是bazel-out相关的知识,希望对你有一定的参考价值。

我有以下目录结构:

my_dir
|
 --> src
|    |
|     --> foo.cc
|     --> BUILD
|
 --> WORKSPACE
|
 --> bazel-out/ (symlink)
| 
| ...

src/BUILD包含以下代码:

cc_binary(
    name = "foo",
    srcs = ["foo.cc"]
)

文件foo.cc使用常规方法使用bar.txt实用程序创建名为<fstream>的文件。

然而,当我用bazel run //src:foo调用Bazel时,文件bar.txt被创建并放置在bazel-out/darwin-fastbuild/bin/src/foo.runfiles/foo/bar.txt而不是my_dir/src/bar.txt,原始源是。

我尝试在outs规则中添加foo字段,但Bazel抱怨outs不是cc_binary的公认属性。

我还想过创建一个filegroup规则,但是没有deps字段,我可以将foo声明为这些文件的依赖项。

如何确保通过运行cc_binary规则生成的文件放在my_dir/src/bar.txt而不是bazel-out/...

答案

Bazel不允许您按设计修改工作空间的状态。

简短的回答是,您不希望过去构建的结果修改工作区的状态,因此可能会修改未来构建的结果。如果在同一工作区上多次运行Bazel会导致不同的输出,则会违反再现性。

举个例子:想象一下调用插入的bazel run //src:foo

#define true false
#define false true

src/foo.cc的顶部。如果再次致电bazel run //src:foo会怎样?

答案很长:https://docs.bazel.build/versions/master/rule-challenges.html#assumption-aim-for-correctness-throughput-ease-of-use-latency

以下是有关输出目录的更多信息:https://docs.bazel.build/versions/master/output_directories.html#documentation-of-the-current-bazel-output-directory-layout

以上是关于如何将文件写入当前目录而不是bazel-out的主要内容,如果未能解决你的问题,请参考以下文章

如何检测文件是不是可在 Ruby 中写入?

如何在单击按钮后写入文件

Matlab:如何将 Excel 文件保存到特定文件夹而不是当前文件夹?

linux如何查看alsa是不是有数据写入

iapp如何编写IC卡数据写入软件

将文件写入 Web 服务器 - ASP.NET