在使用Bazel Build构建项目期间处理/选择接口的不同实现

时间:2017-12-10 22:28:25

标签: c++ build bazel

我在cpp中有两个接口实现,我想在构建(Bazel Build)项目时每次选择一个实现,每次生成的可执行应用程序应该是同名的。 我的BUILD文件看起来像:

FatalErrorException

使用此BUILD文件,我可以获得两个不同的结果,但生成的可执行应用程序具有不同的名称。我正在构建如下:

cc_library( name = "printme1", srcs = ["Firstimplementation.cpp"], hdrs = ["source.h"], ) cc_library( name = "printme2", srcs = ["Secondimplementation.cpp"], hdrs = ["source.h"], ) cc_binary( name = "call", srcs = ["main.cpp"], deps = [ ":printme1", ], ) cc_binary( name = "call2", srcs = ["main.cpp"], deps = [ ":printme2", ], ) --->在Gen-bin文件夹

中为我提供了名为 call 的可执行文件

$ bazel build call --->在Gen-bin文件夹

中为我提供了名为 call2 的可执行文件

我最后应该做什么才能拥有相同的名字,每次我自己选择实施时都可以打电话给我。

提前致谢。

1 个答案:

答案 0 :(得分:2)

您可以将selectconfig_setting一起使用。 应该是这样的:

config_setting(
    name = "printme1",
    values = {
        "define": "p1",
    },
)

config_setting(
    name = "printme2",
    values = {
        "define": "p2",
    },
)

cc_library(
    name = "printme",
    srcs = select({":printme1" : ["Firstimplementation.cpp"],
                   ":printme2" : ["Secondimplementation.cpp"]}),
    hdrs = ["source.h"],
)

cc_binary(
    name = "call",
    srcs = ["main.cpp"],
    deps = [
        ":printme",
    ])

在这种情况下,您需要在构建应用时定义:

bazel build --define p1 :call