From 41835719e3df2c3cc7df850d867d497b01f3ca14 Mon Sep 17 00:00:00 2001 From: Orestis <orestis.malaspinas@pm.me> Date: Wed, 10 Mar 2021 10:44:46 +0100 Subject: [PATCH] updates --- slides/make_avance.md | 46 ++++++++++++++++++++++++++++++++++++++----- 1 file changed, 41 insertions(+), 5 deletions(-) diff --git a/slides/make_avance.md b/slides/make_avance.md index 035659e..009efa4 100644 --- a/slides/make_avance.md +++ b/slides/make_avance.md @@ -189,12 +189,20 @@ OBJECTS := $(patsubst %.c,%.o,$(wildcard *.c)) # That escalated quickly: `*`, `%`, `:=`, ... +```makefile +# version "longue" +SOURCES = $(wildcard *.c) +OBJECTS = $(SOURCES:.c=.o) +# version "courte" +OBJECTS := $(patsubst %.c,%.o,$(wildcard *.c)) +``` + Let's take one step at a time: -* Les `*`, -* Les `%`, et leurs différences. -* Les fonctions, ici `wildcard` et `patsubst`. -* Le symbole `:=` vs `=`. +* Les `*`{.makefile}, +* Les `%`{.makefile}, et leurs différences. +* Les fonctions, ici `wildcard`{.makefile} et `patsubst`{.makefile}. +* Le symbole `:=`{.makefile} vs `=`{.makefile}. # Le symbole `*` @@ -221,7 +229,35 @@ OBJECTS = *.o OBJECTS := $(wildcard *.o) # retourne tous les fichier .o ``` -# Le symbole `:=` vs `=` (1/2) +# La différence entre `*` et `%` + +* Le symbole `*`{.makefile} sert à générer une *liste* d'objets. +* Le symbole `%`{.makefile} sert comme *emplacement* (placeholder). + +## Exemple + +```makefile +%.o: %.c # % est la partie avant .c + $(CC) -o $@ -c $< $(CFLAGS) # la règle pour chaque `%.c` +# équivalent à +galaxy.o: galaxy.c +stars.o: stars.c +vec.o: vec.c + +``` + +## Application + +```makefile +$(patsubst # Substitution de texte pour chaque + %.c,\ # Le pattern "avant" le .c + %.o,\ # Le pattern "avant" le .o + $(wildcard *.c)\ # Tous les fichiers .c + ) +``` + + +# Le symbole `:=`{.makefile} vs `=`{.makefile} (1/2) Deux façon (flavors) d'assigner des variables (voir [ce lien](https://www.gnu.org/software/make/manual/html_node/Flavors.html#Flavors)): -- GitLab