【问题标题】:Rename bazel output (extension) after build构建后重命名 bazel 输出(扩展)
【发布时间】:2018-09-01 19:04:46
【问题描述】:

我看到有一个线程已经讨论过这个问题,但有点含糊:

Can I instruct bazel to emit a ".elf" suffix to executables?

不幸的是,这对我没有帮助。我正在尝试使用 Bazel 在 Windows 上为 Autodesk Maya 编译插件,因此我的输出需要是带有自定义扩展名 .mll.dll 文件。这是我的 BUILD 文件设置的示例代码:

cc_binary(
    name = "myPlugin.dll",  # can't rename this to .mll, otherwise bazel won't build
    srcs = glob(
        [
            "myPlugin.h",
            "myPlugin.cpp",
        ]
    ),
    deps = [
        "@maya_repo//:Foundation",
        "@maya_repo//:OpenMaya",
    ],
    linkopts = [
        "-export:initializePlugin",
        "-export:uninitializePlugin",
    ],
    linkshared = True,
)

一切都可以编译,但我似乎找不到将扩展名重命名为 .mll 的方法,我尝试在 genrules 上进行记录,但无法正常工作。

有人能指出我正确的方向吗?

【问题讨论】:

    标签: maya bazel maya-api


    【解决方案1】:
    genrule(
       name = "plugin_mll",
       srcs = ["myPlugin.dll"],
       outs = ["myPlugin.mll"],
       cmd = "cp $(location myPlugin.dll) $(location myPlugin.mll)",
    )
    

    或使用 Make 变量:

    genrule(
       name = "plugin_mll",
       srcs = ["myPlugin.dll"],
       outs = ["myPlugin.mll"],
       cmd = "cp $< $@",
    )
    

    然后运行bazel build //path/to/package:plugin_mll 调用genrule,或bazel build //path/to/package:myPlugin.mll 直接构建文件目标。

    【讨论】:

    • 感谢您的回答!但是我认为在我让它工作之前我还有另一个问题需要解决:目前 myPlugin.dll 输出三个文件,基本上它从 Maya 复制它依赖的 .dll 文件(OpenMaya.dll,Foundation.dll),而不是生成我的输出.因此,当我执行 cp ($location myPlugin.dll) 时,它说有多个输出,但我找不到告诉 Bazel 避免将那些额外的库放在那里的方法。这可能吗?
    • 哈,发现问题所在了,我不得不使用tools = [":myPlugin.dll"] 让它工作,这样它就不会考虑外部库了。非常感谢您的帮助!
    猜你喜欢
    • 2022-11-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-23
    • 2017-01-28
    • 1970-01-01
    • 1970-01-01
    • 2016-12-06
    相关资源
    最近更新 更多