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 超出了必要的范围的主要内容,如果未能解决你的问题,请参考以下文章