2

我正在一个bazel build由 git 子模块组成的项目中运行,具有以下结构:

/work/
├── tensorflow/ [git submodule]
└── train/
    └── DeepSpeech/ [git submodule]
        └── native_client/

构建命令如下所示:

bazel build \
    --config=monolithic \
    -c opt \
    --copt=-O3 \
    --copt="-D_GLIBCXX_USE_CXX11_ABI=0" \
    --copt=-fvisibility=hidden \
    //native_client:libdeepspeech.so \
    //native_client:generate_trie

我收到以下错误:

ERROR: /work/tensorflow/native_client/BUILD:6:1: Executing genrule //native_client:ds_git_version failed (Exit 1)
realpath: /work/train/DeepSpeech/native_client/../.git/: Not a directory

似乎在抱怨这/work/train/DeepSpeech/.git不是一个目录,这将是正确的,因为它/work/train/DeepSpeech/.git是一个文件,包含 git 子模块的 git 树的路径。

以下是 的内容/work/train/DeepSpeech/.git

gitdir: ../../.git/modules/train/DeepSpeech

我的问题是:有没有办法让 bazel 尊重我的存储库的子模块结构?理想情况下,我可以在bazel build命令中传递一些标志,使其神奇地工作,但我对其他选项持开放态度。

谢谢你的帮助!

4

1 回答 1

2

Bazel 确实不了解 Git 子模块。

然而,Bazel 有一个存储库的概念,您可以WORKSPACE使用所谓的存储库规则在工作区根目录中的文件中指定存储库的结构。

这个页面解释了WORKSPACE文件的概念,我相信这是你需要的规则。

于 2018-11-22T07:24:58.190 回答