gpt4 book ai didi

c++ - Bazel 头文件代码生成器

转载 作者:可可西里 更新时间:2023-11-01 18:29:16 66 4
gpt4 key购买 nike

我试图通过编写一个规则来执行生成器,将代码生成器添加到我的 bazel 构建中,但我坚持将生成的头文件作为包含路径依赖项添加到我尝试构建的库中。

规则是这样的:

def _impl(ctx):
output = ctx.outputs.out
input = ctx.attr.defs
md_dir = list(ctx.attr.md_dir.files)[0]
print("generating", output.path)
ctx.action(
outputs=[output],
progress_message="Generating %s" % md_dir,
command="python codegen.py -md_dir %s %s -o %s" % (md_dir.path, input, output.path)
)

code_generate = rule(
implementation=_impl,
attrs={
"defs": attr.string(),
"md_dir": attr.label(allow_files=True, single_file=True),
"out": attr.output()
},
)

和这样的 BUILD 文件:

load("/common/code_generate", "code_generate")

code_generate(
name="generate_header_defs",
defs="common/header_definition_file",
md_dir="header_defs",
out="gen_header.h",
)

cc_library(
name="lnt",
hdrs=glob(["*.h"]),
srcs=["source.c":gen_header.h"],
visibility=["//visibility:public"],
deps=["@dep1//:x", "@dep2//:y", "@dep3//:z"],
)

代码生成工作并将代码写入bazel-out/local-fastbuild/bin/common/gen_header.h 但 gcc 命令行不会将包含路径添加到生成的头文件是什么导致错误:gen_header.h:没有这样的文件或目录

最佳答案

两种可能的解决方案:

1) 使用 output_to_genfiles 属性:

code_generate = rule(
implementation = _impl,
output_to_genfiles = True,
attrs = {...}
)

基本上,它会将您生成的输出放在 bazel-genfiles 中,而 cc_* 会在那里寻找 header 。它没有非常详尽的记录here .

2) 您可以创建一个运行 python codegen.py 的 genrule(而不是在 Skylark 规则中执行)。

关于c++ - Bazel 头文件代码生成器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32742382/

66 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com