Приостановка GNU Make в консоли Windows при возникновении ошибки
Вопрос
Часть установки приложения, за которое я несу ответственность, компилирует некоторые библиотеки кода на языке Си.Это делается в консоли с использованием 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
- дополнительная информация о "паузе" : http://technet.microsoft.com/en-us/library/bb490965.aspx
- Ссылка на командную строку DOS A-Z : http://technet.microsoft.com/en-us/library/bb490890.aspx