diff --git a/slides/make_avance.md b/slides/make_avance.md index e2ef2228b969a0f828fa5318ff6b4a1654cda2ab..89f406c4484474db4d22291baa26cdb11e63811c 100644 --- a/slides/make_avance.md +++ b/slides/make_avance.md @@ -205,7 +205,43 @@ stars.o: *.h vec.o: vec.h ``` -# On peut faire mieux +# Le symbole `:=` vs `=` (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)): + +## Le symbole `=` + +- Façon **récursive**: + + ```makefile + foo = $(bar) + bar = $(ugh) + ugh = Huh? + ``` + + ici `foo` vaut `Huh?`. +- Valeurs remplacées "récursivement". +- Variables remplacées à chaque appel (lent + imprédictible!). + +# Le symbole `:=` vs `=` (2/2) + +Deux façon (flavors) d'assigner des variables (voir [ce lien](https://www.gnu.org/software/make/manual/html_node/Flavors.html#Flavors)): + +## Le symbole `:=` + +- Façon **simplement développée** (`Simply expanded variable`): + + ```makefile + x := foo + y := $(x) bar + x := later + ``` + + ici `y` vaut `foo bar` et `x` vaut `later` (avec des `=`, `y` vaudrait `later bar`). +- Les variables se comportent comme en `C`. +- En particulier dans les *longs* `Makefile` le comportement est plus prédictible. + +# Pour aller plus loin (pas ici...) Il est possible de prendre **tous** les fichiers `.c` @@ -290,39 +326,3 @@ $(patsubst # Substitution de texte pour chaque $(wildcard *.c)\ # Tous les fichiers .c ) ``` - -# Le symbole `:=` vs `=` (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)): - -## Le symbole `=` - -- Façon **récursive**: - - ```makefile - foo = $(bar) - bar = $(ugh) - ugh = Huh? - ``` - - ici `foo` vaut `Huh?`. -- Valeurs remplacées "récursivement". -- Variables remplacées à chaque appel (lent + imprédictible!). - -# Le symbole `:=` vs `=` (2/2) - -Deux façon (flavors) d'assigner des variables (voir [ce lien](https://www.gnu.org/software/make/manual/html_node/Flavors.html#Flavors)): - -## Le symbole `:=` - -- Façon **simplement développée** (`Simply expanded variable`): - - ```makefile - x := foo - y := $(x) bar - x := later - ``` - - ici `y` vaut `foo bar` et `x` vaut `later` (avec des `=`, `y` vaudrait `later bar`). -- Les variables se comportent comme en `C`. -- En particulier dans les *longs* `Makefile` le comportement est plus prédictible.