关于makefile:如果发生错误,请在Windows控制台中暂停GNU Make

关于makefile:如果发生错误,请在Windows控制台中暂停GNU Make

Pause GNU Make in a Windows console if an error occurs

我负责的应用程序的安装过程的一部分,将编译一些C代码库。 这是使用GNU Make在控制台中完成的。

因此,在安装过程中,会弹出一个控制台窗口,您会在编译和链接时看到生成文件输出向导,完成后控制台窗口将关闭,安装程序将继续。

除非编译错误,否则一切都很好。 然后,make文件会出错,并且控制台窗口会关闭,然后您才有可能了解正在发生的情况。

因此,我想发生的是,如果makefile中出现错误,则控制台窗口会暂停并带有"按键继续"类型的功能,以便控制台保持打开状态。 否则,请照常退出并关闭控制台。

我不知道如何在GNU Makefile或可以运行Make的批处理文件中执行此操作。


这应该可以解决问题:

1
if not ERRORLEVEL 0 pause

在DOS中键入help if,以获取有关错误级别用法的更多信息。


这是您要寻找的:

1
if ERRORLEVEL 1 pause

如果您输入

1
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

由于1ERRORLEVEL通常表示存在错误,而0则没有错误,因此我们可以增加比较条件中的最小值以获得所需的结果:

1
2
test.exe 0
IF ERRORLEVEL 1 PAUSE

条件:-1 => 1 == FALSE

条件:0 => 1 == FALSE

条件:1 => 1 == TRUE

在这个例子中。当ERRORLEVEL1或更高版本时,脚本将暂停

请注意,这允许-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


推荐阅读