bazel 重新编译 protobuf 超出了必要的范围

Posted

技术标签:

【中文标题】bazel 重新编译 protobuf 超出了必要的范围【英文标题】:bazel recompiles protobuf more than necessary 【发布时间】:2019-07-04 04:44:58 【问题描述】:

我关注了this example,效果很好。

但有时(并非总是)当我更改一些与 protobuf 完全无关的应用程序级代码并重新构建时,bazel 会花费所有时间重新编译 protobuf。

有什么建议可以尝试调试吗?

【问题讨论】:

有同样的问题。构建现在需要 30 秒,而不是之前的 5 秒。每次新构建开始时,它都会重新编译所有的 protobuf... 【参考方案1】:

我遇到了同样的问题:protobuf C++ 似乎重新编译了每个构建。构建项目的时间从大约 3 秒缩短到 30 秒。

我正在使用以下命令启动构建:

bazel build -c dbg --config=asan <target>
bazel run -c dbg --config=asan <target>

一旦我删除--config=asan

,问题实际上就消失了

这里是 asan 的配置方式供参考(行位于 .bazelrc 中,紧邻 WORKSPACE 文件:

# Address sanitizer
build:asan --strip=never
build:asan --copt -fsanitize=address
build:asan --copt -DADDRESS_SANITIZER
build:asan --copt -DDYNAMIC_ANNOTATIONS_ENABLED=1
build:asan --copt -g
build:asan --copt -fno-omit-frame-pointer
build:asan --copt -fsanitize-address-use-after-scope
build:asan --linkopt -fsanitize=address
build:asan --dynamic_mode=off

【讨论】:

谢谢!我没有使用 --config=asan 但仍然得到了重新编译... --config=asan 只是一种包含 .bazelrc 中定义的所有标志的方法。运行bazel build 时检查构建中包含哪些标志可能很有用(可能在“.bazelrc”或其他方式中配置了一些标志。 您是否建议我检查我正在使用的标志并确定导致问题的标志?不幸的是,我的重新编译问题有点断断续续......你猜猜你的情况是哪个标志导致重新编译?

以上是关于bazel 重新编译 protobuf 超出了必要的范围的主要内容,如果未能解决你的问题,请参考以下文章

mediapipe bazel 编译问题

mediapipe bazel 编译问题

mediapipe bazel 编译问题

在 cmake 中使用预编译的 tensorflow

如何重新编译hadoop源码

Bazel 编译工具 学习