首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么在使用lib作为外部库时会出现未声明的包含错误?

为什么在使用lib作为外部库时会出现未声明的包含错误?
EN

Stack Overflow用户
提问于 2018-06-27 01:08:58
回答 1查看 803关注 0票数 0

我试图在我的bazel构建中包括一个外部库(glm),但是我得到了未声明的包含--问题是我不知道如何修复它,也不知道为什么,因为如果我手动提取库时使用相同的构建脚本,它就会构建得很好。

我设法对这个问题做了一个很小的再现,无论是工作案例还是不工作案例。

不工作的示例

我的文件夹结构

  • glmExtBuild
    • 工作空间
    • 外部
      • glm.BUILD

这是我的工作区文件

代码语言:javascript
复制
new_http_archive(
  name = "glmExt",
  url = "https://github.com/g-truc/glm/archive/0.9.9.0.tar.gz",
  sha256 = "514dea9ac0099dc389cf293cf1ab3d97aff080abad55bf79d4ab7ff6895ee69c",
  strip_prefix = "glm-0.9.9.0",
  build_file = "externals/glm.BUILD",
)

这是我的glm.BUILD文件

代码语言:javascript
复制
package(default_visibility = ["//visibility:public"])
cc_library(
  name= "glm",
  defines= ["GLM_ENABLE_EXPERIMENTAL", "GLM_FORCE_RADIANS", 
  "GLM_FORCE_DEPTH_ZERO_TO_ONE"],
  srcs=glob(["glm/**/*.cpp"]) + ["glm/detail/_fixes.hpp"],
  hdrs=glob(["glm/**/*.hpp"])+glob(["glm/**/*.h"]),
  includes = ["glm"],
  textual_hdrs = glob(["glm/**/*.inl"]),
  visibility = ["//visibility:public"],
)

这就是我在运行时遇到的错误

代码语言:javascript
复制
bazel build @glmExt//:glm --verbose_failures --sandbox_debug

ERROR: C:/users/...../external/glmExt/BUILD.bazel:121:1: undeclared inclusion(s) in rule '@glmExt//:glm':
this rule is missing dependency declarations for the following files included by 'external/glmExt/glm/detail/glm.cpp': 
'external/glmext/glm/detail/_fixes.hpp'
'external/glmext/glm/detail/setup.hpp'
'external/glmext/glm/simd/platform.h'
'external/glmext/glm/fwd.hpp'
'external/glmext/glm/detail/setup.hpp'
'external/glmext/glm/detail/type_int.hpp'
'external/glmext/glm/detail/setup.hpp'
'external/glmext/glm/detail/type_float.hpp'
...

工作示例:

我的文件夹结构

我的工作区文件为空

这是我的构建文件

代码语言:javascript
复制
package(default_visibility = ["//visibility:public"])
cc_library(
  name= "glm",
  defines= ["GLM_ENABLE_EXPERIMENTAL", "GLM_FORCE_RADIANS", "GLM_FORCE_DEPTH_ZERO_TO_ONE"],
  srcs=glob(["glmSrc/glm/**/*.cpp"]) + ["glmSrc/glm/detail/_fixes.hpp"],
  hdrs=glob(["glmSrc/glm/**/*.hpp"])+glob(["glmSrc/glm/**/*.h"]),
  includes = ["glmSrc"],
  textual_hdrs = glob(["glmSrc/glm/**/*.inl"]),
  visibility = ["//visibility:public"],
)

然后,当运行build命令时,它成功地完成了。

代码语言:javascript
复制
PS D:\......\glmBuild2> bazel build :glm --verbose_failures --sandbox_debug
INFO: Analysed target //:glm (1 packages loaded).
INFO: Found 1 target...
INFO: From Compiling glmSrc/glm/detail/glm.cpp:
glmSrc/glm/detail/glm.cpp(4): warning C4005: 'GLM_ENABLE_EXPERIMENTAL': macro redefinition
glmSrc/glm/detail/glm.cpp(4): note: command-line arguments:  see previous definition of 'GLM_ENABLE_EXPERIMENTAL'
Target //:glm up-to-date:
  C:/users/.../execroot/__main__/bazel-out/x64_windows-fastbuild/bin/libglm.a
INFO: Elapsed time: 1.830s, Critical Path: 1.30s
INFO: 3 processes, local.
INFO: Build completed successfully, 4 total actions

有谁有主意吗?谢谢

更新:

代码语言:javascript
复制
bazel version
Build label: 0.14.0
Build target: bazel-out/x64_windows-opt/bin/src/main/java/com/google/devtools/build/lib/bazel/BazelServer_deploy.jar
Build time: Fri Jun 1 13:06:29 2018 (1527858389)
Build timestamp: 1527858389
Build timestamp as int: 1527858389

巴泽尔杂志:https://github.com/bazelbuild/bazel/issues/5485

EN

回答 1

Stack Overflow用户

发布于 2018-06-27 07:29:57

我使用Bazel0.15.0在linux上尝试了第一个示例,并且在我添加“”之后,所有示例都起作用了。转换为includes属性glm。您有可能在linux上测试它吗?那是只有窗户的问题吗?你用哪种bazel版本?

谢谢你的澄清。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51053215

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档