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

如何让Clang生成的汇编代码包含编译调用命令行信息?

问题:让Clang生成的汇编代码包含编译命令行信息

执行如下命令编译代码时:

$ echo "int main(void){}" | clang -xc++ - -S -o xxx.S

生成的xxx.S汇编文件中,没有类似.invoc "clang -xc++ - -S -o xxx.S"或# compiler invocation: clang -xc++ - -S -o xxx.S的命令行调用注释。想知道如何实现这个需求,是否可行,且了解到部分C编译器默认支持该功能。

解决方案

Clang完全支持生成包含编译命令行信息的汇编代码,只需添加特定编译选项即可:

  • 使用-frecord-gcc-switches选项:这个选项会让Clang在生成的汇编文件末尾添加一条注释,记录完整的编译命令行。
    示例命令:
    $ echo "int main(void){}" | clang -xc++ - -S -o xxx.S -frecord-gcc-switches
    
    打开生成的xxx.S,就能找到类似这样的注释行:
    # GCC command line: clang -xc++ - -S -o xxx.S -frecord-gcc-switches
    
  • 针对ELF目标平台,还可以用-grecord-gcc-switches选项:该选项会把命令行信息嵌入到调试节中,同时汇编文件里也会保留对应的注释。这个选项通常和调试信息选项-g配合使用,适合需要调试信息的场景。

另外补充:部分其他C编译器(比如GCC)默认不会生成这类注释,但也可以通过-frecord-gcc-switches开启;少数编译器可能有专属选项,但Clang兼容这个GCC风格的选项,是最通用的选择。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 20:20:04