Un générateur de site statique - retour accueil
git clone git://bebou.netlib.re/catium
Log | Files | Refs | README |
makefile (2754B)
1 # Si une erreur survient dans l'exécution d'une règle alors le fichier concerné 2 # est supprimé 3 .DELETE_ON_ERROR: 4 5 ############################################################# 6 # On liste les fichiers avec lesquels on veut faire des trucs 7 ############################################################# 8 9 # On créé des variables contenant la liste des fichiers qui nous intéressent 10 # Dans sources les sh à transformer en html 11 # Dans annexes le reste des fichiers 12 sources = $(shell find contents -type f -name '*.sh') 13 annexes = $(shell find contents -type f -not -name '*.sh') 14 15 ######################### 16 # Construction des cibles 17 ######################### 18 19 # On construit les chemins des fichiers à produire correspondant 20 # aux fichiers listés dans sources et annexes 21 # On appelle les chemins créés ainsi des "cibles" 22 # On le fait à l'aide de la fonction patsubst invoquée via la 23 # syntaxe des "substitution references" (voir 24 # https://www.gnu.org/software/make/manual/html_node/Text-Functions.html#index-patsubst-1) 25 # Ex: Pour pageshtml on prend tous les chemins de fichiers récupérés dans sources puis 26 # contents/ devient public/ et .sh devient .html 27 # Le fichier source "contents/truc/bidule.sh" donnera donc la page html 28 # "public/truc/bidule.html" 29 # Même mécanique pour les fichiers annexes 30 pageshtml = $(patsubst contents/%.sh, public/%.html, $(sources)) 31 annexescibles = $(patsubst contents/%, public/%, $(annexes)) 32 33 ######## 34 # Règles 35 ######## 36 37 # Syntaxe générale d'une règle : 38 # cible : liste dépendances ; commandes 39 # ou 40 # cible : liste dépendances 41 # commandes 42 43 # On créer une "fausse" règle (phony en anglais) all pour qu'exécuter make sans 44 # argument construise tout le site. 45 # cette règle se nomme "all" mais elle pourrait s'appeler "toto". 46 all: exec ${pageshtml} ${annexescibles} 47 48 # Une autre "fausse" règle pour nettoyer le dossier public. Faire `make clean` 49 # pour l'appeler. 50 clean:; rm -r public/* 51 52 # Une troisième fausse règle pour rendre exécutable toutes les sources .sh 53 exec:; chmod +x ${sources} 54 55 # Règles pour générer les fichiers 56 57 # Ce que % match dans la cible sera substitué à la place de % dans les 58 # dépendances. 59 # $< = première dépendance 60 # $@ = cible 61 62 # Règle pour la génération des pages html 63 public/%.html : contents/%.sh page layouts/html 64 @mkdir -p $(shell dirname $@) 65 $< > $@ 66 67 # Pour les autres fichiers 68 public/% : contents/% 69 @mkdir -p $(shell dirname $@) 70 cp $< $@ 71 72 # Pour que make sache que all clean et exec sont officiellement de 73 # fausses règles. Lui permet d'ignorer l'existence de fichiers nommés 74 # all clean ou exec s'il en existe. 75 # Voir: https://www.gnu.org/software/make/manual/html_node/Phony-Targets.html 76 .PHONY: all clean exec