这是我实际工作空间中的一个例子,我的项目可以看到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文件。有没有更好的方法来实现这一目标?
答案 0 :(得分:1)
你的解决方案对我来说很好。
看起来我正在滥用WORKSPACE文件
或者,创建一个自定义存储库规则,detects the OS [1],creates a symlink到d:/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")