如果发生错误,在 Windows 控制台中暂停 GNU Make
题
我负责的应用程序的部分安装编译了一些 C 代码库。这是使用 GNU Make 在控制台中完成的。
因此,作为安装的一部分,控制台窗口会弹出,您可以在编译和链接时看到 make 文件输出向导,完成后控制台窗口关闭并且安装程序继续。
一切都很好,除非出现编译错误。然后,在您有机会弄清楚发生了什么之前,make 文件就会出错并且控制台窗口会关闭。
因此,如果 makefile 出现错误,我希望控制台窗口暂停并具有“按某个键继续”类型的功能,以便控制台保持打开状态。否则,只需正常退出并关闭控制台即可。
我不知道如何在 GNU Makefile 或可以运行 Make 的批处理文件中执行此操作。
解决方案
这应该可以解决问题:
if not ERRORLEVEL 0 pause
类型 help if
在 DOS 中了解有关错误级别使用的更多信息。
其他提示
这就是您正在寻找的:
if ERRORLEVEL 1 pause
如果您输入
HELP IF
你得到这个信息:错误级数|如果最后一个程序运行返回出口代码,则指定真实条件 等于或大于 指定的数量。
使用这个简单的 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;
}
}
我们可以在 a 中测试退出代码 批处理文件 像这样:
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