首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Bazel:如何将标头全局化为一个包含路径

Bazel:如何将标头全局化为一个包含路径
EN

Stack Overflow用户
提问于 2018-06-03 11:22:29
回答 2查看 1.6K关注 0票数 2

在Buck中,人们可能会这样写:

代码语言:javascript
复制
exported_headers = subdir_glob([
    ("lib/source", "video/**/*.h"),
    ("lib/source", "audio/**/*.h"),
],
excludes = [
    "lib/source/video/codecs/*.h",
],
prefix = "MediaLib/")

这一行将使这些头文件在MediaLib/下可用。在Bazel中,什么是等同的?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-06-04 05:35:16

我最终写了一条规则来做这件事。它提供的输出类似于文件组的输出,并且可以在宏中与cc_library结合使用。

代码语言:javascript
复制
def _impl_flat_hdr_dir(ctx):
    path = ctx.attr.include_path
    d = ctx.actions.declare_directory(path)
    dests = [ctx.actions.declare_file(path + "/" + h.basename)
             for h in ctx.files.hdrs]

    cmd = """
        mkdir -p {path};
        cp {hdrs} {path}/.
        """.format(path=d.path, hdrs=" ".join([h.path for h in ctx.files.hdrs]))

    ctx.actions.run_shell(
       command = cmd,
       inputs = ctx.files.hdrs,
       outputs = dests + [d],
       progress_message = "doing stuff!!!"
    )

    return struct(
       files = depset(dests)
    )

flat_hdr_dir = rule(
    _impl_flat_hdr_dir,
    attrs = {
        "hdrs": attr.label_list(allow_files = True),
        "include_path": attr.string(mandatory = True),
    },
    output_to_genfiles = True,
)
票数 2
EN

Stack Overflow用户

发布于 2018-06-03 23:41:33

所以我没有测试它,但是从文档中可以看出它应该类似于:

代码语言:javascript
复制
cc_library(
name = "foo",
srcs = glob([
    "video/**/*.h",
    "audio/**/*.h",
 ],
excludes = [ "lib/source/video/codecs/*.h" ]
),
include_prefix = "MediaLib/"
)

https://docs.bazel.build/versions/master/be/c-cpp.html#cc_library.include_prefix https://docs.bazel.build/versions/master/be/functions.html#glob

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50662996

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档