« Make » : différence entre les versions

De Justine's wiki
Aller à la navigation Aller à la recherche
Aucun résumé des modifications
Aucun résumé des modifications
 
Ligne 1 : Ligne 1 :
= Make =
= Make : présentation vite fait =


La définition de GNU.org donne:
La définition de GNU.org donne:


{{Blockquote
GNU Make is a tool which controls the generation of executables and other non-source files of a program from the program's source files.  
|text=GNU Make is a tool which controls the generation of executables and other non-source files of a program from the program's source files.  
 
}}
Il s'agit d'un outil que l'on rencontre souvent et qui tend à être de moins en moins utilisé malgré sa simplicité. Pour le dire plus simplement, Make sert principalement à compiler et installer des programmes; il orchestre des tâches selon des dépendences, exécute des commandes pour générer des fichiers et les garder à jour de façon efficace.
 
Il a pour lui:
* D'exister sur tous les OS ou presque
* De gérer les dépendances, les valeurs par défaut
* De ne pas peser bien lourd,
* etc
 
= Utilisation simple =
* [https://gagor.pro/2024/02/how-i-stopped-worrying-and-loved-makefiles/ Source]
* [https://www.gnu.org/software/make/manual/make.html Documentation]
 
L'exemple donné dans la sources utilise make pour générer les fichiers d'alias, access et autres dans Postfix. Il s'agit de fichiers de conf que l'on écrit et que l'on compile dans un format particulier (le Berkeley DB, en .db).
 
On va pouvoir utiliser un makefile pour le faire automatiquement; chacun de nos fichier .db sera une target de notre makefile. Le makefile contient des règles pour créer nos targets.
 
L'exemple de make donné dans ma source est:
 
<nowiki>
.PHONY: reload
 
all: aliases.db access.db virtual.db reload
 
aliases.db: aliases
    postalias aliases
 
access.db: access
    postmap access
 
virtual.db: virtual
    postmap virtual
 
reload:
    postfix reload
</nowiki>
 
Le fichier doit être nommé "makefile" ou "Makefile" .
 
Explication:
* .PHONY : On déclare ici quelles targets sont "phony" (comme dans "faux" ou "bidon" en français) : il s'agit de cibles qui ne vont pas réellement générer des fichiers. On déclare "reload" comme étant phony : on ne cherche pas à générer un fichier qui s'appellerait "reload", et même si il y'a un fichier nommé ainsi on n'en tiens pas compte.
* all : all est une règle particulière, appellée avec la commande "make all" (ou juste "make", all est la règle par défaut). Ici on déclare que make doit exécuter les règles citées, dans l'ordre.
* aliases.db: aliases : Ici, on dit que le fichier "aliases.db" dépend du fichier "aliases". Si aliases.db n'existe pas ou que aliases est plus récent que lui, le fichier aliases.db sera généré avec la commande donnée en dessous.
* postalias aliases : Il s'agit de la commande utilisée pour générer le fichier aliases.db.
Le même schéma est utilisé pour les 2 autres fichiers .db.
* reload : Déclare la target reload. Cette target pourra être appellée avec la commande "make reload"
* postfix reload : commande exécutée par la target reload.

Dernière version du 2 mai 2024 à 15:29

Make : présentation vite fait

La définition de GNU.org donne:

GNU Make is a tool which controls the generation of executables and other non-source files of a program from the program's source files. 

Il s'agit d'un outil que l'on rencontre souvent et qui tend à être de moins en moins utilisé malgré sa simplicité. Pour le dire plus simplement, Make sert principalement à compiler et installer des programmes; il orchestre des tâches selon des dépendences, exécute des commandes pour générer des fichiers et les garder à jour de façon efficace.

Il a pour lui:

  • D'exister sur tous les OS ou presque
  • De gérer les dépendances, les valeurs par défaut
  • De ne pas peser bien lourd,
  • etc

Utilisation simple

L'exemple donné dans la sources utilise make pour générer les fichiers d'alias, access et autres dans Postfix. Il s'agit de fichiers de conf que l'on écrit et que l'on compile dans un format particulier (le Berkeley DB, en .db).

On va pouvoir utiliser un makefile pour le faire automatiquement; chacun de nos fichier .db sera une target de notre makefile. Le makefile contient des règles pour créer nos targets.

L'exemple de make donné dans ma source est:

.PHONY: reload

all: aliases.db access.db virtual.db reload

aliases.db: aliases
    postalias aliases

access.db: access
    postmap access

virtual.db: virtual
    postmap virtual

reload:
    postfix reload

Le fichier doit être nommé "makefile" ou "Makefile" .

Explication:

  • .PHONY : On déclare ici quelles targets sont "phony" (comme dans "faux" ou "bidon" en français) : il s'agit de cibles qui ne vont pas réellement générer des fichiers. On déclare "reload" comme étant phony : on ne cherche pas à générer un fichier qui s'appellerait "reload", et même si il y'a un fichier nommé ainsi on n'en tiens pas compte.
  • all : all est une règle particulière, appellée avec la commande "make all" (ou juste "make", all est la règle par défaut). Ici on déclare que make doit exécuter les règles citées, dans l'ordre.
  • aliases.db: aliases : Ici, on dit que le fichier "aliases.db" dépend du fichier "aliases". Si aliases.db n'existe pas ou que aliases est plus récent que lui, le fichier aliases.db sera généré avec la commande donnée en dessous.
  • postalias aliases : Il s'agit de la commande utilisée pour générer le fichier aliases.db.

Le même schéma est utilisé pour les 2 autres fichiers .db.

  • reload : Déclare la target reload. Cette target pourra être appellée avec la commande "make reload"
  • postfix reload : commande exécutée par la target reload.