首页 > 解决方案 > 为什么 bazel 失败,标题不在指定的条带前缀下

问题描述

我正在使用 bazel 3.7.2(相同的项目适用于 bazel 3.3.1)

在我的构建文件中,我使用:

cc_library(
   name = "xft",
   hdrs = ["@nixpkgs_xft//:include"],                                                                                                         
   strip_include_prefix = "/external/nixpkgs_xft/include",
)

跑步bazel build target,巴泽尔抱怨:

BUILD:71:11: in cc_library rule //target:xft: header 'external/nixpkgs_xft/include/X11/Xft/Xft.h' is not under the specified strip prefix 'external/nixpkgs_xft/include'

不知何故,巴泽尔对标题的前缀有了不同的理解……这应该如何工作?

external/nixpkgs_xft/include/X11/Xft/Xft.h
external/nixpkgs_xft/include

标签: bazel

解决方案


好的,错误消息确实令人困惑。我查看了代码,发现与前缀相比,与头文件相比有不同的东西:存储库相对路径与前缀进行比较(但错误消息打印“执行路径”)。

似乎在较新的 Bazel 中,您不再需要包含exernal/foo路径的一部分,所以这有效:

cc_library(
    name = "xft",
    hdrs = ["@nixpkgs_xft//:include"],
    strip_include_prefix = "/include",
)

推荐阅读