You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Bazel构建C++项目时添加gtest外部依赖报错如何解决

问题解决步骤

报错核心原因是手动在copts中硬写头文件路径的方式不符合Bazel的依赖传递规则,沙箱编译时无法正确识别外部依赖的头文件路径,按照以下步骤修改即可解决:

第一步:修改dependencies/BUILD.gtest配置

将原copts配置替换为Bazel原生的includes属性,该属性会自动将头文件路径传递给所有依赖当前库的目标,无需手动逐个配置:

cc_library(
    name = "main",
    srcs = glob(
        ["src/*.cc"],
        exclude = ["src/gtest-all.cc"]
    ),
    hdrs = glob([
        "include/**/*.h",
        "src/*.h"
    ]),
    includes = ["include"],
    linkopts = ["-pthread"],
    visibility = ["//visibility:public"],
)

第二步:修改test/BUILD配置

删除手动指定的头文件路径copts配置,修改后如下:

cc_test(
  name = "unittests",
  srcs = ["scanner_test.cc"],
  deps = [
   "//scanner:scanner",
   "@gtest//:main"
  ]
)

第三步:清理缓存重新编译

执行以下命令清除旧的依赖缓存,再重新构建即可:

bazel clean --expunge
bazel build //test:unittests

可选简化方案(无需自定义BUILD.gtest)

googletest 1.10.0及以上版本已经自带官方Bazel构建配置,无需自行维护BUILD.gtest,可进一步简化配置:

  1. 修改WORKSPACE中的http_archive配置,删除build_file字段:
http_archive(
    name = "gtest",
    url = "https://github.com/google/googletest/archive/release-1.10.0.zip",
    sha256 = "94c634d499558a76fa649edb13721dce6e98fb1e7018dfaeba3cd7a083945e91",
    strip_prefix = "googletest-release-1.10.0",
)
  1. 修改test/BUILD的依赖为gtest官方提供的构建目标:
cc_test(
  name = "unittests",
  srcs = ["scanner_test.cc"],
  deps = [
   "//scanner:scanner",
   "@gtest//:gtest",
   "@gtest//:gtest_main"
  ]
)

内容的提问来源于stack exchange,提问作者gottlob

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 13:48:00