Mettre GNU Make en pause dans une console Windows en cas d'erreur
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.
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
- plus d'informations sur 'pause': http://technet.microsoft. com / fr-us / library / bb490965.aspx
- AZ de référence de ligne de commande DOS: http://technet.microsoft.com /en-us/library/bb490890.aspx