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

时间:2008-09-18 09:43:52

标签: windows makefile gnu

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

因此,作为安装的一部分,控制台窗口会弹出打开,在完成控制台窗口关闭并且安装程序继续时,您会在编译和链接时看到make文件输出。

一切都很好,除非有编译错误。然后,在你有机会弄清楚发生了什么之前,make文件就会出错并且控制台窗口会关闭。

所以,我想要发生的是让控制台窗口暂停,按下“按键继续”类型功能,如果makefile出错,那么控制台保持打开状态。否则,只需正常退出并关闭控制台。

我无法弄清楚如何在GNU Makefile中或从可以运行Make的批处理文件中执行此操作。

4 个答案:

答案 0 :(得分:9)

这应该可以解决问题:

if not ERRORLEVEL 0 pause

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

答案 1 :(得分:2)

这就是你要找的东西:

if ERRORLEVEL 1 pause

如果您输入

HELP IF

你得到这个信息:ERRORLEVEL号码| 如果最后一个程序运行返回退出代码等于或大于指定的数字,则指定真实条​​件。

答案 2 :(得分:1)

使用这个简单的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;
    }
}

我们可以在批处理文件中测试退出代码,如下所示:

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

答案 3 :(得分:0)

您是否尝试过'暂停'命令?

@echo off
echo hello world
pause