请告诉我在Bazel中使用多平台WORKSPACE的更好方法

时间:2018-04-08 20:06:34

标签: c++ bazel

这是我实际工作空间中的一个例子,我的项目可以看到TUT(模板单元测试),无论我是在Windows或Linux上测试它们。

new_local_repository(
    name = "win32_tut",
    path = "/d/diego/progs/c++/lib/tut/",
    build_file_content = """
cc_library(
    name = "tut",
    srcs = glob([
        "tut/*.hpp",
    ]),
    hdrs = glob([
        "*.h",
    ]),
    visibility = ["//visibility:public"],
)
""",
)

new_local_repository(
    name = "linux_tut",
    path = "/usr/include/",
    build_file_content = """
cc_library(
    name = "tut",
    srcs = glob([
        "tut/*.hpp",
    ]),
    hdrs = glob([
        "tut.h",
    ]),
    visibility = ["//visibility:public"],
)
""",
)

new_local_repository(
    name = "tut",
    path = ".",
    build_file_content = """
cc_library(
    name = "tut",
    deps = select({
        "@bazel_tools//src/conditions:windows": ["@win32_tut//:tut"],
        "//conditions:default": ["@linux_tut//:tut"],
    }),
    visibility = ["//visibility:public"],
)
""",
)

我的所有cc_test规则都取决于"@tut//:tut"。 这对我有用,但看起来我正在滥用WORKSPACE文件。有没有更好的方法来实现这一目标?

1 个答案:

答案 0 :(得分:1)

你的解决方案对我来说很好。

  

看起来我正在滥用WORKSPACE文件

或者,创建一个自定义存储库规则,detects the OS [1],creates a symlinkd:/diego/progs/c++/lib/tut/usr/include目录,creates a BUILD file只有一个cc_library ,对符号链接下的所有文件进行全局处理。

查看example for a custom repository

[1]例如repository_ctx.os.name.lower().startswith("windows")