จะสร้างเอาต์พุตแอสเซมบลีด้วย Sublime Text ได้อย่างไร

ฉันได้สร้างคำสั่ง build ที่กำหนดด้วยตนเองเมื่อรวบรวม C ไฟล์ใน Sublime Text 2 และใช้งานได้ดี

ไฟล์ 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. ฉันจะรวมคำสั่ง build ทั้งสองนี้ไว้ในไฟล์ output_combined.sublime-build ไฟล์เดียวได้อย่างไร เพื่อให้ไฟล์คำสั่งที่รวมกันสร้างไฟล์ .exe และ .asm ในคราวเดียวได้อย่างไร

(ระบบ: วินโดวส์ 10)


person ssd    schedule 10.04.2016    source แหล่งที่มา


คำตอบ (1)


เพื่อตอบคำถามของคุณ:

  1. หากคุณใช้คำสั่งเชลล์เช่น > คุณต้องเพิ่ม "shell": true เป็นอาร์กิวเมนต์ (หรือใน ST3 ให้ใช้ shell_cmd แทน cmd)
  2. หากคุณใช้ cmd ในเชลล์ คุณสามารถรวมสองคำสั่งเข้ากับ && ได้ (ดำเนินการคำสั่งที่สองหากคำสั่งแรกสำเร็จ)

นอกจากนี้ ฉันขอแนะนำให้เพิ่มขอบเขต selector, working_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"
}
person r-stein    schedule 11.04.2016
comment
ฟังดูยุติธรรม แต่หลังจากได้ลองแล้ว กลับแสดงข้อผิดพลาดต่อไปนี้: TypeError: __init__() got an unexpected keyword argument 'shell_cmd' (ลิงก์: i.imgur.com/0qENVO9.png) - person ssd; 11.04.2016