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

问题描述 投票:4回答:1

我有以下目录结构:

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/...

c++ file-io output rules bazel
1个回答
4
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.