$ python gencpp.py
Run Code Online (Sandbox Code Playgroud)
此命令foo.cpp在工作目录中生成cpp文件.
我想在运行此命令bazel建立能够包括之前foo.cpp在cc_binary的srcs属性.
我尝试过的:
genrule(
name = 'foo',
outs = ['foo.cpp'],
cmd = 'python gencpp.py',
)
cc_library(
srcs = ['foo.cpp'], # tried also with :foo
...
)
Run Code Online (Sandbox Code Playgroud)
声明输出'external/somelib/foo.cpp'不是由genrule创建的.这可能是因为genrule实际上没有创建此输出,或者因为输出是一个目录而且genrule是远程运行的(请注意,只有声明的文件输出的内容是从远程运行的genrules复制的).
我知道有一个解决方案需要gencpp.py稍微修改一下,但这不是我想要的.
foo.cpp该命令在工作目录中生成一个 cpp 文件。
我建议您更改此设置,以便:
那么你的 genrule 命令可以是:
python gencpp.py --outputFile=$@
Run Code Online (Sandbox Code Playgroud)
或者
python gencpp.py > $@
Run Code Online (Sandbox Code Playgroud)
(我个人的一般偏好是后者,尽管在需要写入多个输出的情况下不能使用它。)
分别。
正如乌尔夫·亚当斯指出的:
Bazel 并行运行多个操作,如果同一个规则是工具和应用程序的依赖项,它可能会尝试同时运行这两个操作,并且它们会相互覆盖,从而可能产生非常糟糕的结果。
因此,最好避免编写 bazel 不直接了解的输出文件。
感谢@kristina 的回答。
生成后我必须复制foo.cpp到目录。outs
genrule(
name = 'foo',
outs = ['foo.cpp'],
cmd = """
python gencpp.py
cp foo.cpp $@
""",
)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2829 次 |
| 最近记录: |