我正在尝试为以下目录结构编写Bazel Build文件。
thirdparty
|_WORKSPACE
|_somelib
| |_src
| |_ a.c
| |_ BUILD
| |_include
| |_a.h
|_include
|_ b.h
当前的BUILD文件:thirdparty / somelib / src / BUILD
cc_library(
name = "a",
srcs = ["a.c"],
hdrs = ["thirdparty/somelib/include/a.h"],
)
此构建文件导致错误:
使用的命令:bazel build somelib / src:a
错误:/ thirdparty / somelib / src / BUILD:1:1:没有这样的包' thirdparty / somelib / include / a.h':在包路径上找不到BUILD文件并由&#引用39; // A / SRC:升
错误:分析目标' // somelib / src:a'失败;建立中止。
我需要一些帮助来弄清楚我在构建文件中出错的地方
答案 0 :(得分:3)
有很多方法可以解决这个问题,其中之一是:
将BUILD
文件添加到somelib/include
,其中包含以下内容:
filegroup(
name = "headers",
srcs = ["a.h"],
visibility = ["//somelib/src:__pkg__"],
)
将somelib/src/BUILD
更新为:
cc_library(
name = "a",
srcs = ["a.c"],
hdrs = ["//somelib/include:headers"],
)
您现在可以使用bazel build //somelib/src:a
构建它。
另一种解决方案是将somelib/src/BUILD
移至somelib/BUILD
,因此现在包//somelib
包含两个子目录src
和include
,两者都不是拥有自己的BUILD文件(因此它们本身不是包)。然后,您将somelib/BUILD
更新为:
cc_library(
name = "a",
srcs = ["src/a.c"],
hdrs = ["include/a.h"],
)
你可以像bazel build //somelib:a
一样构建它。
请参阅https://bazel.build/versions/master/docs/build-ref.html#packages_targets