当从 CMake 调用时,Bazel 在构建后不会退出 (ExternalProject_Add)

Bazel doesn't exit after build when called from CMake (ExternalProject_Add)

我正在尝试使用 Ninja 从 CMake 构建一个使用 Bazel 作为其构建系统的外部项目。我通过使用 ExternalProject_Add

来做到这一点
ExternalProject_Add(bazel_proj
  SOURCE_DIR "${bazel_proj_DIR}"
  CONFIGURE_COMMAND :
  CONFIGURE_HANDLED_BY_BUILD ON
  BUILD_COMMAND bazel build //:install
  INSTALL_COMMAND bazel run //:install
  BUILD_IN_SOURCE ON
  BUILD_ALWAYS ON
  USES_TERMINAL_BUILD ON
  USES_TERMINAL_INSTALL ON
  LOG_BUILD ON
  LOG_INSTALL ON
  LOG_OUTPUT_ON_FAILURE ON
  LOG_MERGED_STDOUTERR ON
  INACTIVITY_TIMEOUT 10
)

我尝试将 --worker_quit_after_build 添加到构建命令中,但没有帮助。 Bazel 默认使用 linux-sandbox spawn 策略。

解决此问题的唯一方法是使用 CTRL+C 停止构建并重新开始,以便下次进入安装步骤!

我也无法让 CMake 将 Bazel 的进度报告打印到终端。这可能是相关的。

Bazel 有一个 client/server 模型,服务器保留在该模型中以进行后续增量构建。所以这可能是由于服务器停留在附近。尝试使用 --batch 启动标志,它告诉 bazel 不要使用这个 client/server 模型:

bazel --batch build //:install

https://bazel.build/docs/user-manual#batch

注意 bazel run //:install 也将启动服务器。您也可以在那里添加 --batch ,但它可能会有点慢,因为 Bazel 将重新分析构建。您可以直接 运行 install 程序,这将类似于 bazel-bin/install (取决于 //:install 目标实际构建的内容)。