如何使用 Sublime Text 生成程序集输出?

How to produce assembly output with Sublime Text?

我在 Sublime Text 2 中编译 C 文件时创建了一个自定义构建命令,它工作正常。

output_c.sublime-build文件如下:

{
    "cmd": "gcc $file_base_name.c -g -O3 -m32 -std=c99 -fverbose-asm -fno-inline -save-temps -Wall -Werror -o $file_base_name.exe"
}

然后,我使用以下 output_asm.sublime-build 命令来创建更具可读性的程序集文件:

{
    "cmd": "objdump -d -M intel $file_base_name.o > $file_base_name.asm"
}

但是,第二个命令(我的意思是,第二个 output_asm.sublime-build 文件)将输出转储到屏幕上(就在 Sublime Text 屏幕的状态行上方),而不是创建 $file_base_name.asm 文件.

关于这个问题,我有两个问题:

  1. 如何格式化 objdump 命令,以便将程序集输出写入文本文件?
  2. 如何将这两个构建命令合并到一个 output_combined.sublime-build 文件中,以便合并的命令文件同时创建 .exe.asm 文件?

(系统:Windows10)

为您解答问题:

  1. 如果您使用 shell 命令,例如 >,您必须添加 "shell": true 作为参数(或者在 ST3 中使用 shell_cmd 而不是 cmd
  2. 如果你在shell中使用cmd,那么你可以将这两个命令与&&结合起来(如果第一个命令成功则执行第二个命令)

此外,我建议添加范围 selectorworking_dir(尤其是当您使用 file_base_name 时)和 file_regex(单击跳转到错误).这导致以下构建系统:

{
    "cmd": "gcc $file_name -g -O3 -m32 -std=c99 -fverbose-asm -fno-inline -save-temps -Wall -Werror -o $file_base_name.exe && objdump -d -M intel $file_base_name.o > $file_base_name.asm",
    "shell": true,
    "working_dir": "$file_path",
    "file_regex": "^(..[^:]*):([0-9]+):?([0-9]+)?:? (.*)$",
    "selector": "source.c"
}