You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何配置Bazel生成C/C++程序的汇编文件(含测试场景)

如何让Bazel输出C/C++程序的汇编文件

核心思路:通过Bazel配置传递编译选项

无需修改现有BUILD文件,只需通过配置文件或命令行参数传递编译器生成汇编的选项,即可兼容GCC和Clang(两者核心生成选项一致)。

方法1:命令行临时开启(手动开关)

执行bazel test或bazel build时,添加以下参数,直接让所有C/C++目标生成汇编文件:

bazel test //... --copt="-S" --copt="-fno-asynchronous-unwind-tables" --copt="-masm=intel"
  • -S:告知编译器仅生成汇编文件,跳过后续编译链接步骤
  • -fno-asynchronous-unwind-tables:可选,移除冗余的unwind表,简化汇编代码
  • -masm=intel:可选,切换为Intel格式汇编(默认是AT&T格式)

执行完成后,汇编文件会保存在Bazel输出目录(通常为bazel-out/<平台>/bin/下对应目标的子目录,后缀为.s)。

方法2:通过.bazelrc配置文件持久化管控

若不想每次输入命令行参数,可在项目根目录创建或修改.bazelrc文件,添加专属配置组实现一键开关:

# 定义名为"asm"的全局配置组
build:asm --copt="-S"
build:asm --copt="-fno-asynchronous-unwind-tables"
# 可选:指定汇编格式
build:asm --copt="-masm=intel"

# 单独给test目标配置(可选)
test:asm --copt="-S"
test:asm --copt="-fno-asynchronous-unwind-tables"

使用时只需在命令行追加--config=asm:

# 仅测试阶段生成汇编
bazel test //... --config=asm

# 构建阶段生成汇编
bazel build //... --config=asm

这种方式完全无需改动现有BUILD规则,所有配置集中在.bazelrc,同时兼容GCC和Clang。

注意事项

  1. 使用-S选项后,Bazel不会执行链接步骤,因此测试目标不会实际运行,仅生成汇编文件供你检查内联行为。
  2. 若需同时保留可执行文件和汇编,可改用-save-temps替代-S,编译器会保留预处理、汇编等所有中间文件:
    bazel test //... --copt="-save-temps"
    
    对应.bazelrc配置:
    build:save-temps --copt="-save-temps"
    
  3. 若只需针对特定目标生成汇编,可在命令行指定目标路径,比如bazel test //my/test:target --config=asm,避免生成所有目标的汇编文件。

内容的提问来源于stack exchange,提问作者lmonninger

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 11:00:46