IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Contribuez Pascal Discussion :

Utilisation de make


Sujet :

Contribuez Pascal

  1. #1
    Rédacteur/Modérateur

    Avatar de Roland Chastain
    Homme Profil pro
    Enseignant
    Inscrit en
    décembre 2011
    Messages
    3 823
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : décembre 2011
    Messages : 3 823
    Points : 13 664
    Points
    13 664
    Billets dans le blog
    8
    Par défaut Utilisation de make
    Bonjour !

    J'ai voulu essayer d'utiliser make pour certains de mes projets en Pascal. Je vous montre ce que j'ai fait, au cas où cela intéresserait quelqu'un, et aussi dans le but de recevoir éventuellement des conseils ou des suggestions.

    Je me suis appuyé sur ce tutoriel : Introduction à Makefile

    J'ai fait cela sous Linux, mais sous Windows cela fonctionne aussi, à condition que l'outil make soit installé.

    J'ai donc écrit plusieurs versions d'un fichier Makefile, pour un programme qui s'appelle alouette (mais peu importe, vous remplacerez ce nom par celui de n'importe quel autre programme).

    Première version du fichier Makefile :

    Code Makefile : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    alouette: alouette.pas
    	mkdir -p units
    	fpc -FcUTF8 -B -Mobjfpc -Sah -FUunits alouette.pas -oalouette -dDEBUG -ghl
     
    clean:
    	rm -f units/*.o
    	rm -f units/*.ppu

    Les fichiers Makefile et alouette.pas se trouvent dans le même dossier. J'ouvre donc un terminal dans ce dossier, et je tape make, pour compiler le programme, puis make clean pour supprimer les unités compilées.

    Deuxième version, où l'on utilise des variables (voyez le tutoriel) :

    Code Makefile : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    PC=fpc
    PFLAGS=-FcUTF8 -B -Mobjfpc -Sah -FUunits -dDEBUG -ghl
     
    alouette: alouette.pas
    	mkdir -p units
    	$(PC) $(PFLAGS) alouette.pas -oalouette
     
    clean:
    	rm -f units/*.o
    	rm -f units/*.ppu

    Troisième version, avec des "variables internes" :

    Code Makefile : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    PC=fpc
    PFLAGS=-FcUTF8 -B -Mobjfpc -Sah -FUunits -dDEBUG -ghl
     
    alouette: alouette.pas
    	mkdir -p units
    	$(PC) $^ -o$@ $(PFLAGS)
     
    clean:
    	rm -f units/*.o
    	rm -f units/*.ppu

    Quatrième version, où l'on définit une variable nommée DEBUG, afin de pouvoir choisir le mode de compilation :

    Code Makefile : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    PC=fpc
    DEBUG=true
    ifeq ($(DEBUG),true)
    	PFLAGS=-FcUTF8 -B -Mobjfpc -Sah -FUunits -dDEBUG -ghl
    else
    	PFLAGS=-FcUTF8 -B -Mobjfpc -Sh -FUunits -dRELEASE -CX -XX -Xs
    endif
     
    alouette: alouette.pas
    	mkdir -p units
    	$(PC) $^ -o$@ $(PFLAGS)
     
    clean:
    	rm -f units/*.o
    	rm -f units/*.ppu

    Pour compiler en mode RELEASE, on utilisera la commande make DEBUG=false. En effet, la valeur donnée dans la ligne de commande est prioritaire sur celle qui est écrite dans le fichier.

    Dernière version, pour pouvoir compiler au choix en 32 ou en 64 bits :

    Code Makefile : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    PC=fpc
    PC32=/home/roland/Applications/freepascal32/fpc
    PC64=/home/roland/Applications/freepascal64/fpc
    DEBUG=true
    ifeq ($(DEBUG),true)
    	PFLAGS=-FcUTF8 -B -Mobjfpc -Sah -FUunits -dDEBUG -ghl
    else
    	PFLAGS=-FcUTF8 -B -Mobjfpc -Sh -FUunits -dRELEASE -CX -XX -Xs
    endif
     
    alouette: alouette.pas
    	mkdir -p units
    	$(PC) $^ -o$@ $(PFLAGS)
     
    alouette32: alouette.pas
    	mkdir -p units
    	$(PC32) $^ -o$@ $(PFLAGS)
     
    alouette64: alouette.pas
    	mkdir -p units
    	$(PC64) $^ -o$@ $(PFLAGS)
     
    clean:
    	rm -f units/*.o
    	rm -f units/*.ppu

    Si l'utilisateur tape simplement make, la compilation se fera avec le compilateur installé sur la machine. S'il tape make alouette32, c'est le compilateur 32 bits qui sera appelé.

    Voilà. Qu'en pensez-vous ?

  2. #2
    Responsable Pascal, Lazarus et Assembleur


    Avatar de Alcatîz
    Homme Profil pro
    Ressources humaines
    Inscrit en
    mars 2003
    Messages
    7 775
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ressources humaines
    Secteur : Service public

    Informations forums :
    Inscription : mars 2003
    Messages : 7 775
    Points : 56 523
    Points
    56 523
    Billets dans le blog
    2
    Par défaut
    Bonjour Roland,

    Voilà qui est intéressant ! Par curiosité, dans quelles circonstances as-tu eu besoin d'utiliser make pour tes projets ?
    Règles du forum
    Cours et tutoriels Pascal, Delphi, Lazarus et Assembleur
    Avant de poser une question, consultez les FAQ Pascal, Delphi, Lazarus et Assembleur
    Mes tutoriels et sources Pascal

    Le problème en ce bas monde est que les imbéciles sont sûrs d'eux et fiers comme des coqs de basse cour, alors que les gens intelligents sont emplis de doute. [Bertrand Russell]
    La tolérance atteindra un tel niveau que les personnes intelligentes seront interdites de toute réflexion afin de ne pas offenser les imbéciles. [Fiodor Mikhaïlovitch Dostoïevski]

  3. #3
    Rédacteur/Modérateur

    Avatar de Roland Chastain
    Homme Profil pro
    Enseignant
    Inscrit en
    décembre 2011
    Messages
    3 823
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : décembre 2011
    Messages : 3 823
    Points : 13 664
    Points
    13 664
    Billets dans le blog
    8
    Par défaut
    Citation Envoyé par Alcatîz Voir le message
    Voilà qui est intéressant ! Par curiosité, dans quelles circonstances as-tu eu besoin d'utiliser make pour tes projets ?
    Merci. Pour répondre à ta question : quand tu travailles sur un projet, il y a des actions répétitives, comme compiler (avec telle ou telle option), nettoyer le répertoire, lancer un test, déplacer l'exécutable à un certain endroit, faire une sauvegarde, etc. Jusqu'à présent j'avais pour chacune de ces actions un script, que je lancais depuis un terminal (en rappelant les commandes précédemment tapées avec les flèches du clavier). Or je me suis aperçu que cette façon de faire, c'était exactement le principe de l'outil make.

    Voilà. Si je trouve d'autres améliorations possibles, je les proposerai ici.

  4. #4
    Rédacteur/Modérateur

    Avatar de Roland Chastain
    Homme Profil pro
    Enseignant
    Inscrit en
    décembre 2011
    Messages
    3 823
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : décembre 2011
    Messages : 3 823
    Points : 13 664
    Points
    13 664
    Billets dans le blog
    8
    Par défaut Makefile multiplateforme
    Autre chose dont j'ai oublié de parler, c'est la possibilité d'adapter les commandes à l'OS sous lequel make est exécuté. Voici un exemple :

    Code Makefile : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    PC=fpc
    DEBUG=false
    ifeq ($(DEBUG),true)
    	PFLAGS=-FcUTF8 -B -Mobjfpc -Sah -FUunits -dDEBUG -ghl
    else
    	PFLAGS=-FcUTF8 -B -Mobjfpc -Sh -FUunits -dRELEASE -CX -XX -Xs
    endif
     
    alouette: alouette.pas
    ifeq ($(OS),Windows_NT)
    	if not exist units mkdir units
    	$(PC) $^ -o$@.exe $(PFLAGS)
    else
    	mkdir -p units
    	$(PC) $^ -o$@ $(PFLAGS)
    endif
     
    clean:
    ifeq ($(OS),Windows_NT)
    	del /q units\*.o
    	del /q units\*.ppu
    else
    	rm -f units/*.o
    	rm -f units/*.ppu
    endif

Discussions similaires

  1. Utilisation de Hashtbl.make
    Par maryooman dans le forum Caml
    Réponses: 1
    Dernier message: 18/10/2010, 20h31
  2. [UBUNTU] Impossible d'utiliser la commande make
    Par guigui_cosmos dans le forum Ubuntu
    Réponses: 12
    Dernier message: 13/04/2007, 14h25
  3. Réponses: 5
    Dernier message: 03/10/2006, 11h53
  4. utiliser le make.exe de BC++5
    Par SOPRA-Eherve dans le forum Systèmes de compilation
    Réponses: 1
    Dernier message: 11/05/2006, 19h33

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo