cc_import用于调试和发布版本?

时间:2020-05-22 20:33:29

标签: dll bazel

我的工具集:

  • Windows 10 x64(1909)
  • Bazel 3.1.0
  • Visual Studio 2019(16.6)
  • Powershell

我需要使用预构建的第三方C ++ DLL。第三方库看起来像这样:

<directory> third-party-lib
├── <directory> bin
|   ├── <file> third_party_lib.dll
|   └── <file> third_party_libd.dll
├── <directory> lib
|   ├── <file> third_party_lib.lib
|   └── <file> third_party_libd.lib
└── <directory> includes
    └── <file> third_party_lib.h

因此,有一个发行版和一个调试版两个版本。以“ d”结尾的文件名表示调试版本。

要使用此库,我正在使用cc_import目标:

cc_import(
    name = "third-party-lib",
    interface_library = "lib/third_party_lib.lib",
    shared_library = "bin/third_party_lib.dll",
)

我的构建目标取决于third-party-lib。在发布(opt)模式下构建可以正常工作:

bazel build //:MyBuildTarget

但是,如果我尝试进行调试构建,则会遇到链接器问题:

bazel build --compilation_mode=dbg //:MyBuildTarget

是否有可能在cc_import规则中指定调试和发布DLL?还是我可以为此提案使用其他任何规则?

1 个答案:

答案 0 :(得分:2)

您可以使用select()在库变体之间切换:

cc_import(
    name = "third-party-lib",
    interface_library = "lib/third_party_lib.lib",
    shared_library = select({
        ":debug_build": "third_party_libd.dll",
        "//conditions:default": "third_party_lib.dll",
    }),
)

config_setting(
    name = "debug_build",
    values = {
        "compilation_mode": "dbg",
    },
)