Есть ли способ обнаружить ошибку в пакетном файле Windows? (компиляция кода С++)

Я написал файл run.bat для компиляции, а также запустил свой код на С++ через терминал Windows. В файле всего две команды:

  1. g++ %1.cpp -o %1.exe

  2. %1.exe

Но я не могу понять, как остановить выполнение второй команды, если в коде есть ошибки времени компиляции. Есть ли доступное решение? Пожалуйста, дайте мне знать...

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
0
265
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

Возможно, вы захотите изучить другие способы строительства.

Если у вас есть 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

Обратите внимание, что || также реагирует на %1.exe в случае его выполнения…

aschipfl 15.12.2020 15:25

@aschipfl Верно, это то, что я имел в виду под «сбоем любой команды».

dxiv 15.12.2020 19:48

сохраните как 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

Спасибо всем за помощь мне :)

Другие вопросы по теме