Gcc 为什么';t Bazel是否在使用COPT添加额外的include目录的情况下仍能找到我的include文件?
我修改了stage3 cpp bazelbuild示例,通过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”是一个单独
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__"],
)