我负责的应用程序的安装过程的一部分,将编译一些C代码库。 这是使用GNU Make在控制台中完成的。
因此,在安装过程中,会弹出一个控制台窗口,您会在编译和链接时看到生成文件输出向导,完成后控制台窗口将关闭,安装程序将继续。
除非编译错误,否则一切都很好。 然后,make文件会出错,并且控制台窗口会关闭,然后您才有可能了解正在发生的情况。
因此,我想发生的是,如果makefile中出现错误,则控制台窗口会暂停并带有"按键继续"类型的功能,以便控制台保持打开状态。 否则,请照常退出并关闭控制台。
我不知道如何在GNU Makefile或可以运行Make的批处理文件中执行此操作。
这应该可以解决问题:
1
| if not ERRORLEVEL 0 pause |
在DOS中键入help if,以获取有关错误级别用法的更多信息。
这是您要寻找的:
如果您输入
您得到以下信息:错号|
如果最后一个运行的程序返回的退出代码等于或大于指定的数字,则指定一个真条件。
使用此简单的C程序来操作退出代码:
1 2 3 4 5 6 7 8 9 10
| #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;
}
} |
我们可以像这样在批处理文件中测试退出代码:
1 2
| test.exe 0
IF ERRORLEVEL 0 PAUSE |
条件:0 => 0 == TRUE
当为ERRORLEVEL = 0时,将发生暂停,因为逻辑为>=或大于等于。这很重要,因为尚不能立即确定条件不是==比较。
请注意,用1 => 0替代也将是正确的,因此也会发生暂停。对于任何正数都是如此。
我们只有在0以下才能触发相反的效果:
1 2
| test.exe -1
IF ERRORLEVEL 0 PAUSE |
条件:-1 => 0 == FALSE
由于1的ERRORLEVEL通常表示存在错误,而0则没有错误,因此我们可以增加比较条件中的最小值以获得所需的结果:
1 2
| test.exe 0
IF ERRORLEVEL 1 PAUSE |
条件:-1 => 1 == FALSE
条件:0 => 1 == FALSE
条件:1 => 1 == TRUE
在这个例子中。当ERRORLEVEL为1或更高版本时,脚本将暂停
请注意,这允许-1退出代码与0相同。如果只希望0不暂停怎么办?我们可以使用单独的语法:
1 2
| 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
您是否尝试过"暂停"命令?
1 2 3
| @echo off
echo hello world
pause |
-
有关"暂停"的详细信息:http://technet.microsoft.com/zh-cn/library/bb490965.aspx
-
DOS命令行参考A-Z:http://technet.microsoft.com/zh-cn/library/bb490890.aspx