Почему я получаю необъявленную ошибку включения при использовании библиотеки lib в качестве внешней библиотеки? - PullRequest
0 голосов
/ 27 июня 2018

Я пытаюсь включить внешнюю библиотеку (glm) в свою сборку bazel, но я получаю необъявленное включение, дело в том, что я не понимаю, как это исправить и почему, потому что, если при извлечении я использую тот же скрипт BUILD вручную библиотека, которую он строит нормально.

Мне удалось сделать очень маленькое повторение этой проблемы, как рабочего случая, так и не рабочего.

Неработающий пример

Структура моей папки

  • glmExtBuild
    • WORKSPACE
    • внешние
      • glm.BUILD

Это мой файл WORKSPACE

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

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"],
)

И это ошибки, которые я получаю при запуске

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'
...

Рабочий пример:

Структура моей папки

Мой файл WORKSPACE пуст

А это мой файл BUILD

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"],
)

Затем при запуске команды сборки она успешно завершилась.

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

У кого-нибудь есть идея? Спасибо

Обновление:

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

Выпуск Bazel: https://github.com/bazelbuild/bazel/issues/5485

1 Ответ

0 голосов
/ 27 июня 2018

Я попробовал первый пример на linux, с bazel 0.15.0, и все работало, как только я добавил "." в includes атрибут glm. У вас есть возможность протестировать его на Linux? Это проблема только для Windows? Какую версию Bazel вы используете?

Спасибо за разъяснения.

...