Как создать вывод сборки с помощью Sublime Text?

Я создал самоопределяемую команду сборки при компиляции 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. Как я могу объединить эти две команды сборки в один файл output_combined.sublime-build, чтобы объединенный файл команд создавал файлы .exe и .asm одновременно?

(Система: Windows 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