Utilisation d'une ligne de commande Linux sous Windows
Pour pouvoir faire fonctionner les scripts, il faut que le chemin d'accès à votre compilateur soit dans le PATH. Par défaut, c'est automatiquement le cas avec MinGW, mais pas avec Caml.
Pour tester si votre compilateur est dans le PATH, ouvrez la fenêtre « Exécuter » (accessible dans le menu principal, ou raccourci clavier Super+R), puis tapez le nom de votre compilateur: gcc ou bien g++ ou bien ocamlc.
Si une fenêtre noire s'ouvre et se referme instantanément, c'est que tout est bon. Sinon, vous aurez un message d'erreur vous indiquant que le programme n'a pas été trouvé. Dans ce cas, reportez vous à la section correspondante (plus bas dans le cours) pour savoir comment modifier le PATH.
Pour lancer le "shell", c'est-à-dire la ligne de commande compatible avec la syntaxe Linux, lancez le programme C:\Programs\MinGW\msys\1.0\msys.bat. Nous vous conseillons d'ajouter ce programme dans le menu démarrer. La fenêtre suivante s'affiche.
Il vous faut alors vous déplacer vers votre dossier de travail. Par exemple, on va supposer qu'il s'agit de C:\script, mais ça pourrait être autre chose. (Par contre n'utilisez pas "Mes documents", ni un chemin que contient des espaces, car ça compliquerait tout). Pour changer de dossier, utilisez la commande "cd". Prenez garde à bien remplacer les antislashes par des slashes, conformément à la convention Linux.
Pour tester l'exécution de scripts, nous allons mettre en place le script qui exécute un programme sur un ensemble de fichier tests. Le script en question est décrit en détails dans le cours Travailler efficacement avec le compilateur et le shell disponible sur le site France-IOI.
Commencez par copier le contenu du script ci-dessous dans le fichier C:\script\all.sh.
g++ -Wall -O2 -o output.exe $1 for test_in in *.in; do echo Solving $test_in ...; ./output.exe < $test_in > `basename $test_in .in`.out; done
Si vous utilisez C, il faut changer la première ligne en
gcc -o output.exe $1
Si vous utilisez Caml, il faut changer la première ligne en
ocamlc -o output.exe $1
Et si vous utilisez Caml avec Ocamlopt, il faut changer la première ligne en
ocamlopt -o output.exe $1
Ensuite on va créer un programme nommé C:\script\dup.cpp (ou C:\script\dup.c si vous faîtes du C) avec le contenu suivante:
#include <cstdio> int main() { int x; scanf("%d\n", &x); printf("%d\n", x); return 0; }
Pour Caml, on mettra dans C:\script\dup.ml le texte suivante
let x = read_int() in print_int x
Pour terminer, on va créer deux fichiers tests, nommés C:\script\test1.in et C:\script\test2.in, le premier contenant juste l'entier 1 et le second contenant juste l'entier 2. À ce stade, on dispose donc des fichiers suivants (l'extension du fichier dup pouvant varier selon le langage de programmation):
Nous sommes maintenant prêt à exécuter le script. Pour cela, on invoque le script ./all.sh sur l'argument dup.cpp (ou autre selon le nom de votre programme), en séparant les deux par un espace.
La commande ls permet de voir que deux fichiers test1.out et ont été créés. La commande cat permet de voir le contenu d'un fichier. Pratique également, la commande cat *.out permet de voir le contenu de tous les fichiers d'extension .out à la fois.
Une autre astuce très utile est la redirection de l'entrée et de la sortie standard. Par exemple, pour envoyer le contenu d'un fichier sur l'entrée standard du programme output.exe, il faut écrire :
output.exe < test1.in
Pour envoyer la sortie standard du programme dans un fichier, il faut écrire :
output.exe > test1.out
Et bien sûr, on peut combiner les deux :
output.exe < test1.in > test1.out
Enfin, gardez en tête que le raccourci Ctrl+C permet d'interrompre l'exécution d'un programme à tout instant.
Installation du compilateur Ocamlopt
Si vous compilez avec ocamlopt à la place de ocamlc, vos programmes iront ainsi significativement plus vite. En effet, ocamlopt produit des programmes en codes natifs, comme GCC, et évite ainsi l'utilisation d'un interpréteur de bytecode qui doit simuler les instructions une par une.
Pour l'instant, la compilation native avec Ocaml 3.11 ou supérieure est problématique sous Windows. Pour cela, nous allons installer une version antérieure qui marche tout aussi bien (et même mieux, en l'occurence) pour ce que l'on souhaite faire.
Si vous avez déjà installé OCaml, renommez le dossier C:\Program Files\Objective Caml en C:\Program Files\Objective Caml Recent pour éviter les conflits. (Vous pouvez aussi supprimer le dossier si vous voulez).
Téléchargez la version Ocaml 3.10.2 ici.
Installez cette version dans C:\Program Files\Objective Caml, comme normalement.
Maintenant, pour que ocamlopt marche, il est nécessaire d'installer MinGW. C'est très simple, il suffit de suivre le tutoriel proposé dans ce même chapitre.
Une fois que c'est fait, il ne reste plus qu'à dire à Notepad++ d'utiliser ocamlopt à la place de ocamlc. Pour cela, dans Notepad++, tapez sur F6 pour faire apparaître la ligne de compilation, et remplacez-y ocamlopt par ocamlc. N'oubliez pas de sauvegarder les changements (bouton "Save") dans le profil courant.
Modification du PATH
Modifier le PATH est utile soit parce que l'installation automatique a échouée (possiblement car vous n'aviez pas les droits administrateurs), soit parce que tout simplement vous avez envi que les compilateurs ("gcc", "g++" ou "ocamlc") soient accessibles directement par leur nom, sans avoir besoin de donner le chemin complet.
Utilisez le raccourci clavier "WIN + PAUSE" pour ouvrir les propriétés système (la touche PAUSE se trouve tout en haut à droite des claviers; sur les portables il faut généralement utiliser la touche FN pour y acccéder). (On peut également y accéder par l'objet "Système" depuis le panneau de configuration).
Dans l'onglet "Avancé", clicker sur "Variables d'environements".
Pour régler le PATH pour les compilateurs GCC et G++, il faut éditer la ligne PATH.
Ensuite, prennez soin de ne rien effacer (sinon vous aurez des problèmes sur votre ordinateur), et ajoutez à la fin de la ligne valeur le texte suivant, en supposant que vous voulez rendre "gcc" et "g++" accessibles. Le point-virgule sert à séparer le texte précédent du texte que l'on est en train d'ajouter.
;C:\programs\mingw\bin
Si vous voulez ajouter le compilateur Caml, c'est un peu plus compliqué. Il faut d'abord créer une variable nommée OCAMLLIB (seulement dans le cas où cette variable n'existe pas déjà) comme montré ci-dessous, en lui donnant la valeur
C:\Program Files\Objective Caml\lib
Et ensuite il faut modifier le PATH en ajoutant tout à la fin de la ligne valeur le texte ci-dessous.
;C:\Program Files\Objective Caml\bin
Simplification des lignes de commandes dans Notepad++
Lorsque votre compilateur se trouve dans le PATH, les lignes de compilations se simplifient significativement. Ainsi, pour C/C++ vous pouvez utiliser :
g++ -Wall -O2 -o output.exe $(FULL_CURRENT_PATH) && ./output.exeEt pour Caml vous pouvez utiliser (avec ocamlc ou ocamlopt) :
ocamlopt -o output.exe $(FULL_CURRENT_PATH) && ./output.exe
Problèmes courants
Cannot find gcc (ou g++)Le compilateur gcc n'est pas visible dans le PATH. Voyez la section modification du PATH pour corriger cela.
Cannot find ocamlcLe compilateur ocamlc n'est pas visible dans le PATH. Voyez la section modification du PATH pour corriger cela.
Cannot find pervasives.cmiCette erreur se produit si la variable OCAMLLIB n'est pas enregistré correctement. Voyez la section modification du PATH pour définir OCAMLLIB en C:\Program Files\Objective Caml\lib.
Cannot find ocamlrunCette erreur se produit si "ocamlrun.exe" n'est pas visible dans le PATH. Voyez la section modification du PATH pour changer le PATH et y inclure C:\Program Files\Objective Caml\bin.
Cannot find asLa compilation avec ocamlopt échoue car le compilateur de code assembleur n'est pas accessible. Cela est du au fait que C:\programs\mingw\bin n'est pas enregistré correctement dans le PATH. Voir la section modification du PATH pour résoudre le problème.