如何让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-switchesxxx.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
相关产品推荐
相关产品推荐

