Приостановить GNU Make в консоли Windows, если произошла ошибка - PullRequest
5 голосов
/ 18 сентября 2008

Часть установки приложения, за которое я отвечаю, компилирует некоторые библиотеки кода на C. Это делается в консоли с использованием GNU Make.

Итак, в процессе установки открывается консольное окно, вы видите, как выводится файл make, когда он завершает компиляцию и связывание, когда консольное окно закрывается и программа установки продолжается.

Все хорошо, если только нет ошибки компиляции. Затем файл make выдает ошибку, и окно консоли закрывается, прежде чем вы сможете понять, что происходит.

Итак, я бы хотел, чтобы в окне консоли была приостановлена ​​функция типа «нажать клавишу для продолжения», если в make-файле произошла ошибка, из-за которой консоль осталась открытой. В противном случае просто выйдите как обычно и закройте консоль.

Я не могу понять, как это сделать в GNU Makefile или в командном файле, который может запустить Make.

Ответы [ 4 ]

9 голосов
/ 18 сентября 2008

это должно сработать:

if not ERRORLEVEL 0 pause

введите help if в DOS для получения дополнительной информации об использовании уровня ошибки.

2 голосов
/ 21 октября 2011

Это то, что вы ищете:

if ERRORLEVEL 1 pause

Если вы введете

HELP IF

вы получаете эту информацию: ОШИБКА номер | Указывает истинное условие, если последний запуск программы возвратил код завершения , равный или превышающий указанное число.

1 голос
/ 11 декабря 2016

Использование этой простой C-программы для манипулирования кодом выхода:

#include <stdio.h>
main(int argc, char *argv[]) {
    if (argc == 2) {
        // return integer of argument 1
        return strtol(argv[1], NULL, 10);
    }
    else {
        return 0;
    }
}

Мы можем проверить код завершения в пакетном файле примерно так:

test.exe 0
IF ERRORLEVEL 0 PAUSE

Состояние : 0 => 0 == TRUE

Когда ERRORLEVEL = 0, пауза произойдет, потому что логика >= или больше или равна . Это важно, поскольку не сразу понятно, что условие не является == сравнением.

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

Мы можем вызвать противоположный эффект, только опустившись ниже 0:

test.exe -1
IF ERRORLEVEL 0 PAUSE

Состояние : -1 => 0 == FALSE

Поскольку ERRORLEVEL из 1 обычно означает, что есть ошибка, а 0 нет ошибки, мы можем просто увеличить минимум в условии сравнения, чтобы получить то, что мы хотим, так:

test.exe 0
IF ERRORLEVEL 1 PAUSE

Состояние : -1 => 1 == FALSE

Состояние : 0 => 1 == FALSE

Состояние : 1 => 1 == TRUE

В этом примере. скрипт остановится, когда ERRORLEVEL будет 1 или выше

Обратите внимание, что это позволяет -1 кодам выхода такие же, как 0. Что если кто-то хочет, чтобы 0 не сделал паузу? Мы можем использовать отдельный синтаксис:

test.exe 0
IF NOT %ERRORLEVEL% EQU 0 PAUSE

Состояние : -1 != 0 == TRUE

Состояние : 0 != 0 == FALSE

Состояние : 1 != 0 == TRUE

В этом примере сценарий приостанавливается, если %ERRORLEVEL% не равен 0. Мы можем сделать это с помощью оператора EQU, чтобы сначала проверить, если %ERRORLEVEL% EQU 0, тогда оператор NOT, чтобы получить противоположный эффект, эквивалентный != оператор. Тем не менее, я считаю, что это работает только на машинах NT, а не на обычной DOS.

Ссылки

http://chrisoldwood.blogspot.ca/2013/11/if-errorlevel-1-vs-if-errorlevel-neq-0.html http://ss64.com/nt/errorlevel.html

0 голосов
/ 18 сентября 2008

Вы пробовали команду 'пауза'?

@echo off
echo hello world
pause
...