我有以下目录结构:
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/output_directories.html#documentation-of-the-current-bazel-output-directory-layout