5

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

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

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

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

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

4

4 回答 4

9

这应该可以解决问题:

if not ERRORLEVEL 0 pause

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

于 2008-09-18T09:45:43.683 回答
2

这就是你要找的:

if ERRORLEVEL 1 pause

如果你输入

HELP IF

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

于 2011-10-21T13:47:59.450 回答
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,将发生暂停,因为逻辑是>=or大于或等于。这很重要,因为目前尚不清楚该条件不是==比较。

请注意,替换为1 => 0也将为真,因此也会发生暂停。对于任何正数都是如此。

我们只能通过以下方式触发相反的效果0

test.exe -1
IF ERRORLEVEL 0 PAUSE

条件-1 => 0 == FALSE

由于 an通常意味着ERRORLEVEL1错误,0没有错误,我们可以增加比较条件中的最小值来获得我们想要的结果,如下所示:

test.exe 0
IF ERRORLEVEL 1 PAUSE

条件-1 => 1 == FALSE

条件0 => 1 == FALSE

条件1 => 1 == TRUE

在这个例子中。脚本将在ERRORLEVELis1或更高时暂停

请注意,这允许-1退出代码与0. 如果一个人只想0不暂停怎么办?我们可以使用单独的语法:

test.exe 0
IF NOT %ERRORLEVEL% EQU 0 PAUSE

条件-1 != 0 == TRUE

条件0 != 0 == FALSE

条件1 != 0 == TRUE

在这个例子中,脚本暂停 if %ERRORLEVEL%is not0我们可以通过使用 EQU 运算符先检查 if %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

于 2016-12-10T21:26:27.333 回答
0

您是否尝试过“暂停”命令?

@echo off
echo hello world
pause
于 2008-09-18T10:01:57.653 回答