Ani*_*sto 5 c++ file-io rules output bazel
我有以下目录结构:
my_dir
|
--> src
| |
| --> foo.cc
| --> BUILD
|
--> WORKSPACE
|
--> bazel-out/ (symlink)
|
| ...
Run Code Online (Sandbox Code Playgroud)
src/BUILD 包含以下代码:
cc_binary(
name = "foo",
srcs = ["foo.cc"]
)
Run Code Online (Sandbox Code Playgroud)
该文件使用实用程序使用常规方式foo.cc创建一个命名文件。bar.txt<fstream>
但是,当我调用Bazel时,bazel run //src:foo将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:foowhich inserts
#define true false
#define false true
Run Code Online (Sandbox Code Playgroud)
在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