Приостановка GNU Make в консоли Windows при возникновении ошибки

StackOverflow https://stackoverflow.com/questions/91263

  •  01-07-2019
  •  | 
  •  

Вопрос

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

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

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

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

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

Это было полезно?

Решение

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

if not ERRORLEVEL 0 pause

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

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

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

if ERRORLEVEL 1 pause

Если вы наберете

HELP IF

вы получаете эту информацию:Номер УРОВНЯ ОШИБКИ | Указывает условие true, если последний запуск программы вернул код выхода равно или больше, чем указанный номер.

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

#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

Вы пробовали использовать команду "пауза"?

@echo off
echo hello world
pause
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top