[Deamnde d'aide] Projet script Bash

Fermé
Zithum - 19 nov. 2008 à 17:44
 zehi - 30 nov. 2008 à 22:44
Bonjour, amis et amies de "commentcamarche"

Je suis actuellement dans des études informatiques , et j'ai quelques soucis dans le laguage Bash. J'ai un projet à faire dessus, et je suis quelque peut paumé, j'espère que vous pourrez m'aiguiller afin de réaliser à bien ce projet.
Voici l'énoncé :


Le projet de cette année propose d’aider le développeur à compiler ses sources, vérifier ses erreurs, tester ses fonctions et ses programmes , créer le manuel de l’ application...
Le projet doit au minimum fonctionner pour les sources sur ce site : "le Jeu de Test". Certaines d’entre elles contiennent du C ou du C++, des erreurs, des tests, ...
Les points importants de ce projet sont :
1) on décide de compiler une seule source "masource.cpp" -> on exécute pour cela la commande : "./macompil.sh masource.cpp". Cela créera le fichier "masource.o" par préprocessing.
rappel :
g++ -c -Wall masource.cpp -o masource.o
et le fichier "masource" est le fichier binaire exécutable obtenu après édition des liens.
Rappel :
g++ -Wall masource.o -o masource
!! Attention : les fichiers ne sont pas forcément dans le répertoire courant !!
2) on veut spécifier un nom de fichier de sortie et seulement le preprocessing
"./macompil.sh -p masource.cpp -sortie masortie"
Cela créera seulement le fichier "masortie.o" par préprocessing ;
3) partant des points 1) et 2) on veut pouvoir compiler une série de sources cpp en autant de fichiers exécutables. On exécutera la commande "./macompil.sh tp1.cpp tp2.cpp tp3.cpp" et cela compilera les 3 sources données en entrée en 3 fichiers binaires "tp1", "tp2" et "tp3".
4) si on donne un nom de sortie, par "./macompil.sh source1.cpp source2.cpp source3.cpp -sortie masortie", cela génére les ".o" de chaque fichier source ("source1.o", "source2.o" et "source3.o") et compile un seul fichier binaire "masortie".
rappel :
g++ -Wall -o masortie sortie1.o sortie2.o sortie3.o
!! Attention : votre script doit vérifier qu’il n’y a pas plus d’un main() dans ces 3 fichiers, sinon l’édition des liens est impossible !!
5) on peut passer des options de compilation , soit pour le nom du compilateur à utiliser, soit pour la phase de préprocessing ( génération des ".o"), soit pour la phase d’édition des liens (génération du (ou des) exécutable(s)). On peut exécuter

./macompil.sh -compilateur g++ source1.cpp -sortie monprog
ou

./macompil.sh source1.cpp -options_preproc [-Wall]
ou

./macompil.sh source1.cpp -options_binaire [-lglut -O3]
Evidemment ces options écrasent les options par défaut du script (compilateur g++, éditions des liens avec "-Wall -c", génération du binaire avec "-Wall"). Utiliser des crochets pour limiter les options, ce sera plus facile à analyser dans votre script.
6) exécution et tests On peut lancer l’exécution directement si le projet s’ est bien compilé avec "./macompil.sh source1.cpp source2.cpp -sortie monprog -execute". On peut également lancer les tests des fonctions, classes , modules , ... Il suffit de donner des fonctions test() ou des classes test de votre programmes. Le main() exécute donc cette (ou ces) classe(s) tests.
7) on peut utiliser une combinaison de toutes ces options.

./macompil.sh source1.cpp source2.cpp -compilateur mvscc -sortie monprog -options_preproc [-Wall] -options_binaire[-O3 -m32 -lpthread]"
Autres options indispensables :
I) il faut donner à l’utilisateur les différentes étapes de la compilation avec des messages du style : "./macompil.sh source1.cpp source2.cpp" affichera

DEBUT de compilation 05nov2008 10h23m54s

-- 10h23m56s Compilation de "source1.cpp" entamée...
-- 10h24m12s Aucune erreur, le fichier "source1" a été créé. 350 lignes compilées.

-- 10h24m14s Compilation de "source2.cpp" entamée...
-- 10h26m03s Aucune erreur, le fichier "source2" a été créé. 273 lignes compilées.

FIN de compilation 05nov2008 10h26m05s
ou
"./macompil.sh source1.cpp source2.cpp -sortie monprog" affichera

DEBUT de compilation 05nov2008 10h23m54s

-- 10h23m56s Compilation de "source1.cpp" entamée...
-- 10h24m12s Aucune erreur, le fichier "source1" a été créé. 350 lignes compilées.

-- 10h24m14s Compilation de "source2.cpp" entamée...
<liste des erreurs de g++>
-- 10h26m03s Erreur à la compilation de "source2.cpp"

-- !! Erreur, le fichier binaire "monprog" n'a pas été créé à cause de l'un des modules ("source2.cpp") !!

FIN de compilation 05nov2008 10h26m04s
II) on donne à l’utilisateur la possibilité de supprimer les fichier "tp1.cpp˜", "tp1.bak" (fichiers de sauvegarde des originaux ) ou "tp1.o" (fichiers obtenu par la première phase de compilation), de manière récursive à partir du répertoire courant. On exécutera alors "./macompil.sh - clean "
III ) afin de bien ranger les choses , les sources doivent se trouver dans le répertoire courant ou dans un répertoire "src" (sources) ; les fichiers objets ".o" sont dans un répertoire "obj" et les binaires sont dans un répertoire "bin".
IV ) on veut pouvoir effectuer une sauvegarde des sources (les ".cpp") et du fichier "macompil.sh" afin de transporter ses projets d’une machine à une autre. On exécute "./macompil.sh -sauvegarde -sortie archive _05Novembre2008" et cela crée un fichier TAR compressé qui contient les fichiers sources et "macompil.sh".
rappel :
tar cvzf archive_05novembre2008.tgz *.cpp src/*.cpp macompil.sh
!! Attention, il faut dans ces options aussi informer l’utilisateur de ce que le programme fait !!
Bonus :
— utilisation de gtk-dialog pour lancer les actions ;
— sortie en HTML du log de compilation (que s’est-il passé, quelles erreurs, quels tests, ... ?) ;


Merci d'avance pour vos réponses.

3 réponses

jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 895
19 nov. 2008 à 17:53
0
Bonsoir, je viens de découvrir cette charte, mais je cherche surtout quelqu'un pour m'aider à comprendre et m'expliquer quelques commandes du bash.
je vous remercie d'avance.
0
salut zitium,
essaye avec des $1 sa peu marcher
0