قم بإيقاف GNU Make مؤقتًا في وحدة تحكم Windows في حالة حدوث خطأ

StackOverflow https://stackoverflow.com/questions/91263

  •  01-07-2019
  •  | 
  •  

سؤال

جزء من تثبيت تطبيق أنا مسؤول عنه، يقوم بتجميع بعض مكتبات الأكواد البرمجية بلغة C.يتم ذلك في وحدة التحكم باستخدام GNU Make.

لذلك، كجزء من التثبيت، تنبثق نافذة وحدة التحكم، وترى معالج إخراج الملف أثناء تجميعه وربطه، وعند الانتهاء يتم إغلاق نافذة وحدة التحكم ويستمر المثبت.

كل شيء جيد، ما لم يكن هناك خطأ في الترجمة.ثم يتم اكتشاف الأخطاء في الملف ويتم إغلاق نافذة وحدة التحكم قبل أن تتاح لك الفرصة لمعرفة ما يحدث.

لذا، ما أود حدوثه هو إيقاف نافذة وحدة التحكم مؤقتًا باستخدام وظيفة النوع "اضغط على مفتاح للمتابعة"، إذا كان هناك خطأ من ملف التكوين بحيث تظل وحدة التحكم مفتوحة.بخلاف ذلك، ما عليك سوى الخروج كالمعتاد وإغلاق وحدة التحكم.

لا يمكنني معرفة كيفية القيام بذلك في ملف 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;
    }
}

يمكننا اختبار رمز الخروج في ملف ملف دفعي مثل ذلك:

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
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top