Я написал файл run.bat для компиляции, а также запустил свой код на С++ через терминал Windows. В файле всего две команды:
g++ %1.cpp -o %1.exe
%1.exe
Но я не могу понять, как остановить выполнение второй команды, если в коде есть ошибки времени компиляции. Есть ли доступное решение? Пожалуйста, дайте мне знать...
Возможно, вы захотите изучить другие способы строительства.
Если у вас есть GCC, то, скорее всего, у вас есть команда make , и вы можете писать make-файлы для обработки зависимостей и правил.
И часть, которая больше всего относится к вашему вопросу, заключается в том, что если одно правило в make-файле не выполняется, то правила, расположенные дальше по цепочке, не будут выполняться.
Для системы в вопросе у нас может быть простой Makefile
, такой как этот:
run: $(PROGRAM).exe
./$(PROGRAM).exe
$(PROGRAM).exe: $(PROGRAM).cpp
g++ -Wall $(PROGRAM).cpp -o $(PROGRAM).exe
Затем в терминале запускаете команду
make run PROGRAM=my_program
И команда make
будет читать Makefile
. Если исходный файл my_program.cpp
новее, чем my_program.exe
(или если my_program.exe
не существует), то my_program.cpp
будет встроен в my_program.exe
. Тогда my_program.exe
будет выполнено.
Обратите внимание, что я действительно не рекомендую иметь такую цель «выполнить». Вместо этого я рекомендую вам разделить строительство и запуск. Вы можете сделать это с помощью команды
make PROGRAM=my_program && ./my_program.exe
Это то же самое, что и две отдельные команды
make PROGRAM=my_program
./my_program.exe
Для пакетного решения объедините две команды с помощью &&
, которая запускает вторую команду только в случае успеха первой (и, при желании, добавьте сообщение ||
, если какая-либо команда не удалась).
g++ %1.cpp -o %1.exe && %1.exe || echo command error
@aschipfl Верно, это то, что я имел в виду под «сбоем любой команды».
сохраните как run.cmd и чтобы запустить его, вы должны ввести в консоли run.cmd "имя_файла" (без расширения cpp)
@echo off
g++ %~1.cpp -o %~1.exe
if %errorlevel% equ 0 %~1.exe
Я прочитал много блогов, и я придумал это решение.
g++ %1.cpp -o %1.exe
if %ERRORLEVEL% GEQ 1 exit/b
%1.exe
Спасибо всем за помощь мне :)
Обратите внимание, что
||
также реагирует на%1.exe
в случае его выполнения…