Question

Une partie de l'installation d'une application dont je suis responsable compile des bibliothèques de code C. Ceci est fait dans une console utilisant GNU Make.

Ainsi, lors de l'installation, une fenêtre de la console s'ouvre, vous voyez l'assistant de sortie du fichier make alors qu'il se compile et se lie, une fois l'opération terminée, la fenêtre de la console se ferme et le programme d'installation se poursuit.

Tout va bien, sauf en cas d'erreur de compilation. Ensuite, le fichier make bugs disparaît et la fenêtre de la console se ferme avant que vous ne puissiez savoir ce qui se passe.

Ce que j'aimerais donc, c’est que la fenêtre de la console se mette en pause avec une fonctionnalité du type "appuyez sur une touche pour continuer", s’il ya une erreur dans le fichier makefile afin que la console reste ouverte. Sinon, quittez normalement et fermez la console.

Je ne sais pas comment faire cela dans un Makefile GNU ou à partir d'un fichier de commandes pouvant exécuter le Make.

Était-ce utile?

La solution

cela devrait faire l'affaire:

if not ERRORLEVEL 0 pause

tapez help si sous DOS pour plus d'informations sur l'utilisation du niveau d'erreur.

Autres conseils

Voici ce que vous recherchez:

if ERRORLEVEL 1 pause

Si vous tapez

HELP IF

vous obtenez cette information: numéro ERRORLEVEL | Spécifie une condition vraie si le dernier programme exécuté a renvoyé un code de sortie égal ou supérieur à au nombre spécifié.

Utilisation de ce simple programme en C pour manipuler le code de sortie:

#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;
    }
}

Nous pouvons tester le code de sortie dans un fichier de traitement par lots comme suit:

test.exe 0
IF ERRORLEVEL 0 PAUSE

Condition : 0 = > 0 == VRAI

Lorsque ERRORLEVEL = 0 , la pause se produit car la logique est > = ou supérieur / égal à . Ceci est important, car il n'est pas immédiatement évident que la condition ne soit pas une comparaison == .

Notez que la substitution de 1 = > 0 sera également vrai et la pause se produira également. Cela est vrai pour tout nombre positif.

Nous pouvons déclencher l'effet inverse uniquement en dessous de 0 :

test.exe -1
IF ERRORLEVEL 0 PAUSE

Condition : -1 = > 0 == FAUX

Etant donné qu'un ERRORLEVEL de 1 signifie généralement qu'il y a une erreur et que 0 aucune erreur, nous pouvons simplement augmenter le minimum dans la comparaison. condition pour obtenir ce que nous voulons ainsi:

test.exe 0
IF ERRORLEVEL 1 PAUSE

Condition : -1 = > 1 == FAUX

Condition : 0 = > 1 == FAUX

Condition : 1 = > 1 == VRAI

Dans cet exemple. le script se met en pause lorsque ERRORLEVEL est 1 ou supérieur

Notez que cela autorise -1 les codes de sortie identiques à 0 . Que faire si on ne veut que 0 ne pas faire de pause? Nous pouvons utiliser une syntaxe distincte:

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

Condition : -1! = 0 == VRAI

Condition : 0! = 0 == FAUX

Condition : 1! = 0 == VRAI

Dans cet exemple, le script s'interrompt si % ERRORLEVEL% n'est pas 0 . Nous pouvons le faire en utilisant d'abord l'opérateur EQU pour vérifier si % ERRORLEVEL% EQU 0 , puis l'opérateur NOT pour obtenir l'effet inverse, équivalent à l'opérateur ! = . Cependant, je pense que cela ne fonctionne que sur les machines NT, pas sur DOS.

Références:

http: / /chrisoldwood.blogspot.ca/2013/11/if-errorlevel-1-vs-if-errorlevel-neq-0.html http://ss64.com/nt/errorlevel.html

Avez-vous essayé la commande "pause"?

@echo off
echo hello world
pause
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top