Quand on commence à utiliser make, on pense qu'il faut écrire toutes les cibles à la main. En particulier quand on doit générer plusieurs exécutables ou librairies (ou autre, qui ne soit pas une simple substitution de patterns du genre .c vers .o ).
Plutôt que d'écrire une rêgle à chaque fois, on peut utiliser la commande eval qui permet d'écrire des templates
Avec ce système, chaque construction peut s'écrire avec une variable, contenant les sources impliquées (il faudra parfois en ajouter d'autres, contenant par exemple les libs pour le link, ou d'éventuelles options spécifiques pour le compilateur).
J'ajoute quand même une remarque à la doc de make, cela m'ayant posé problème au départ:
Dans les templates, les seules variables à déréférencer sont les vars qu'on passe en paramètre depuis le "eval": $(1) et suivants.
Les autres variables doivent être protégées avec un '$' supplémentaire.
Donc on écrit directement $(1) pour les paramètres du template.
Par contre, les variables qui servent à la rêgle vont s'écrire ainsi: $$(CXX)
Discussions en français sur la création de jeux videos : IRC libera / #gamedev-fr
# templates avec make
Posté par jseb . En réponse à la dépêche Petit éventail des outils de construction (« builder ») libres. Évalué à 5.
Quand on commence à utiliser make, on pense qu'il faut écrire toutes les cibles à la main. En particulier quand on doit générer plusieurs exécutables ou librairies (ou autre, qui ne soit pas une simple substitution de patterns du genre .c vers .o ).
Plutôt que d'écrire une rêgle à chaque fois, on peut utiliser la commande eval qui permet d'écrire des templates
Avec ce système, chaque construction peut s'écrire avec une variable, contenant les sources impliquées (il faudra parfois en ajouter d'autres, contenant par exemple les libs pour le link, ou d'éventuelles options spécifiques pour le compilateur).
C'est très bien expliqué ici:
http://www.gnu.org/software/make/manual/html_node/Eval-Function.html#Eval-Function
J'ajoute quand même une remarque à la doc de make, cela m'ayant posé problème au départ:
Dans les templates, les seules variables à déréférencer sont les vars qu'on passe en paramètre depuis le "eval": $(1) et suivants.
Les autres variables doivent être protégées avec un '$' supplémentaire.
Donc on écrit directement $(1) pour les paramètres du template.
Par contre, les variables qui servent à la rêgle vont s'écrire ainsi: $$(CXX)
Discussions en français sur la création de jeux videos : IRC libera / #gamedev-fr