2016-04-10 8 views
0

Ich habe einen selbst definierten Build-Befehl beim Kompilieren von C Dateien in Sublime Text 2 erstellt und es funktioniert OK.Wie produziert man die Assembly-Ausgabe mit Sublime Text?

Die output_c.sublime-build Datei lautet wie folgt:

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

Und dann verwende ich den folgenden output_asm.sublime-build Befehl, um eine lesbare Montagedatei zu erstellen:

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

jedoch den zweiten Befehl (Ich meine, die zweite Datei output_asm.sublime-build) löscht die Ausgabe auf dem Bildschirm (direkt über der Statuszeile auf dem Sublime Text-Bildschirm) anstatt eine $file_base_name.asm Datei zu erstellen.

auf das Thema Connected, habe ich zwei Fragen:

  1. Wie kann ich den Befehl objdump zu formatieren, so dass ich die Assembly-Ausgabe in eine Textdatei geschrieben bekommen?
  2. Wie kann ich diese beiden Build-Befehle in einer output_combined.sublime-build Datei kombinieren, so dass die kombinierte Befehlsdatei die .exe und die .asm Datei auf einmal erstellt?

(Betriebssystem: Windows 10)

Antwort

2

Sie beantworten Fragen:

  1. , wenn Sie Shell-Befehle wie > verwenden, müssen Sie "shell": true als Argument hinzufügen (oder in ST3 Verwendung shell_cmd statt cmd)
  2. Wenn Sie cmd in der Shell verwenden, dann können Sie einfach die beiden Befehle mit && kombinieren (zweiten Befehl ausführen, wenn der erste Befehl erfolgreich war)

Außerdem würde ich empfehlen, einen Bereich selector, working_dir hinzufügen (vor allem, wenn Sie mit file_base_name arbeiten) und einem file_regex (klicken Sprung auf Fehler). Daraus ergibt sich die folgende Build-System:

{ 
    "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" 
} 
+0

Messe-Sounds, aber nach einen Versuch, spuckt es die folgende Fehlermeldung aus: ** 'Typeerror: __init __() bekam ein unerwartetes Stichwort Argument‚shell_cmd'' ** (link : http://i.imgur.com/0qENVO9.png) – ssd