Gcc 为什么';t Bazel是否在使用COPT添加额外的include目录的情况下仍能找到我的include文件?

Gcc 为什么';t Bazel是否在使用COPT添加额外的include目录的情况下仍能找到我的include文件?,gcc,bazel,Gcc,Bazel,我修改了stage3 cpp bazelbuild示例,通过copts使用额外的包含路径 但是,这会产生编译器错误(注意,-Ilib/foo用作gcc的选项): 有人能解释为什么找不到bar/baz.h?cpp tutorial/stage3/lib/BUILD中的cc_库没有声明对头文件的依赖关系,因此Bazel没有将该文件放入沙箱,因此编译失败(应该如此) 您不需要额外的copts。相反,您必须将bar/baz.h添加到“hello time”规则的hdrs,或者,如果“bar”是一个单独

我修改了stage3 cpp bazelbuild示例,通过
copts使用额外的包含路径

但是,这会产生编译器错误(注意,
-Ilib/foo
用作
gcc
的选项):


有人能解释为什么找不到
bar/baz.h
cpp tutorial/stage3/lib/BUILD
中的
cc_库
没有声明对头文件的依赖关系,因此Bazel没有将该文件放入沙箱,因此编译失败(应该如此)


您不需要额外的
copts
。相反,您必须将
bar/baz.h
添加到“hello time”规则的
hdrs
,或者,如果“bar”是一个单独的包(它有一个构建文件),则添加一个“cc_库”规则,其
hdrs
包括
baz.h
,并从“hello time”开始依赖于该库


您不需要额外的
copts
。相反,您必须将
bar/baz.h
添加到“hello time”规则的
hdrs
,或者,如果“bar”是一个单独的包(它有一个构建文件),则添加一个“cc_库”规则,该规则的
hdrs
包括
baz.h
,并从“hello time”开始依赖于该库。

我在Bazel邮件列表中得到了这个答案(简短版本:需要将此头文件添加到
srcs
,这有点令人惊讶):

问题是,您没有以任何方式在cc_库的源中声明头文件baz.h。因此,当在沙箱中执行时(默认情况下),该文件不可见。在没有沙箱的情况下,构建已经可以工作(请尝试使用--spawn_strategy=standalone标志运行它)

因此,在来源中声明baz.h:

cc_library(
    name = "hello-time",
    srcs = [
        "foo/bar/baz.h",
        "hello-time.cc",
    ],
    hdrs = ["hello-time.h"],
    copts = ["-Ilib/foo"],
    visibility = ["//main:__pkg__"],
)

我在Bazel邮件列表中得到了这个答案(简短版本:这个头文件需要添加到
srcs
,这有点令人惊讶):

问题是,您没有以任何方式在cc_库的源中声明头文件baz.h。因此,当在沙箱中执行时(默认情况下),该文件不可见。在没有沙箱的情况下,构建已经可以工作(请尝试使用--spawn_strategy=standalone标志运行它)

因此,在来源中声明baz.h:

cc_library(
    name = "hello-time",
    srcs = [
        "foo/bar/baz.h",
        "hello-time.cc",
    ],
    hdrs = ["hello-time.h"],
    copts = ["-Ilib/foo"],
    visibility = ["//main:__pkg__"],
)