Изменить существующую систему сборки в возвышенном тексте 3 - PullRequest
0 голосов
/ 11 февраля 2019

В настоящее время я использую приведенную ниже систему сборки в ST3 для компиляции кодов .cpp

{
    "cmd": ["mingw32-g++.exe", "-c", "$file", "-o", "${file_path}/${file_base_name}.o", "&&",
"mingw32-g++.exe", "-o", "${file_path}/${file_base_name}.exe", "${file_path}/${file_base_name}.o", "&&",
"start","${file_path}/${file_base_name}.exe"],
    "file_regex": "^(..[^:]*):([0-9]+):?([0-9]+)?:? (.*)$",
    "working_dir": "${file_path}",
    "selector": "source.c++,source.cpp",
    "shell": true
}

Проблема, с которой я сталкиваюсь, заключается в том, что мне нужно вводить входные данные один за другим в cmd, , которыйотнимает много времени.

Есть ли возможность каким-либо образом настроить вышеуказанную систему сборки для выполнения аналогичного действия, указанного ниже?

Вкл. cmd.

${file_base_name}.exe < TestCases.txt > TestAnswers.txt

Ответы [ 2 ]

0 голосов
/ 12 февраля 2019

После долгих попыток я нашел решение этой проблемы, приведенное ниже.

Обновленная система сборки

{
    "cmd": ["C++_compile_Sublime.bat", "$file"],
    "file_regex": "^(..[^:]*):([0-9]+):?([0-9]+)?:? (.*)$",
    "working_dir": "${file_path}",
    "selector": "source.c, source.c++,source.cpp,source.cc",
    "shell": true
}

и C ++ _ compile_Sublime.bat выглядит следующим образом

mingw32-g++.exe -c %~n1.c -o %~n1.o
mingw32-g++.exe -o %~n1.exe %~n1.o
cls
%~n1.exe < Input.txt > Output.txt

И, как указано @OdatNurd, "shell_cmd" работает просто идеально

Примечание: C ++ _ compile_Sublime.bat должен находиться в переменной окружения

0 голосов
/ 12 февраля 2019

Это возможно стандартным способом, который заключается в использовании перенаправления ввода и вывода в командной строке, как описано в самом вашем вопросе.Однако для того, чтобы это работало, вам нужно изменить способ определения вашей сборки.

Используя cmd и shell вместе (как вы делаете в настоящее время), вы задаете командную строку какпрограмма для запуска и аргументы, которые она должна получить (это то, что вы делаете сейчас).

Здесь вы хотите использовать shell_cmd, и в этом случае вы предоставляете одну строку, представляющую полную командную строку, как если бы вы вводили ее в командной строке, что в целом проще.

Не вдаваясь в мельчайшие детали задействованных базовых механизмов, они обрабатываются и выполняются по-разному в среде исполнения Python, но при использовании shell_cmd передает вашу командную строку непосредственно командному процессору для обработки.

AnПримером модифицированной сборки может быть следующий:

{
    "shell_cmd": "mingw32-g++.exe \"${file}\" -o \"${file_path}/${file_base_name}\" && \"${file_path}/${file_base_name}\" < Input.txt > Answers.txt",
    "file_regex": "^(..[^:]*):([0-9]+):?([0-9]+)?:? (.*)$",
    "working_dir": "${file_path}",
    "selector": "source.c, source.c++",
}

Первое, на что здесь следует обратить внимание, это то, что поскольку shell_cmd представляет собой одну строку, все имена файлов должны быть заключены в "quotes" для защитыс именами файлов, которые содержат пробелы, что не нужно делать при использовании cmd, потому что в этом случае каждый аргумент является отдельной строкой.

Кроме того, здесь была немного очищена командная строка, потому что вы должныиметь возможность компилировать файл непосредственно в исполняемый файл без необходимости выполнять отдельную ссылкуep, если вы используете gcc / mingw (если вы предпочитаете, этот шаг достаточно легко добавить обратно).

Как определено здесь, в рабочем каталоге указан путь, по которому компилируется файл.хранится в, это означает, что входной файл, который ищет команда, должен находиться в этой папке, и именно там будет создан выходной файл.

Если вы откроете выходной файл, Sublime будет перезагружать его каждый раз, когда вы запускаете сборку (вам может или не может быть предложено, в зависимости от ваших предпочтений).

...