diff --git a/exemples/make/Makefile.1 b/exemples/make/Makefile.1 new file mode 100644 index 0000000000000000000000000000000000000000..c8b08e737299b883828fcbfcaf4d86ebee41da68 --- /dev/null +++ b/exemples/make/Makefile.1 @@ -0,0 +1,11 @@ +galaxy: galaxy.o stars.o vec.o + gcc -o galaxy galaxy.o + +galaxy.o: galaxy.c + gcc -c galaxy.c + +stars.o: stars.c stars.h vec.h + gcc -c galaxy.c + +vec.o: vec.c vec.h + gcc -c vec.c \ No newline at end of file diff --git a/slides/Makefile b/slides/Makefile index 50ae2dde5f31104674ad2e2d6bfc5a27692c2aeb..af25342ad24f10c5e793ab4c75426232e285293a 100644 --- a/slides/Makefile +++ b/slides/Makefile @@ -11,16 +11,16 @@ REVEALOPTIONS += --self-contained REVEALOPTIONS += -V revealjs-url=./reveal.js REVEALOPTIONS += -V theme=white -MD=$(wildcard *.md) -HTML=$(MD:%.md=%.html) -PDF=$(MD:%.md=%.pdf) -MARKDOWN=$(MD:%.md=%.markdown) +MD=$(wildcard *.md) # Tous les fichiers .md +HTML=$(MD:%.md=%.html) # Pour les fichier html on transforme .md -> .html +PDF=$(MD:%.md=%.pdf) # Pour les fichier pdf on transforme .md -> .pdf +MARKDOWN=$(MD:%.md=%.markdown) # Pour les fichier markdown on transforme .md -> .markdown -all: $(PDF) $(HTML) +all: $(PDF) $(HTML) # La cible par défaut (all) exécute les cibles %.html et %.pdf -markdown: $(MARKDOWN) +markdown: $(MARKDOWN) # La markdown les cibles %.markdown -%.pdf: %.md metadata.yaml +%.pdf: %.md metadata.yaml # %.pdf (chaque fichier %.md génère un fichier avec le même nom mais l'extension .pdf et la dépendance metadata.yaml) pandoc -s $(OPTIONS) $(PDFOPTIONS) -o $@ $^ %.html: %.md metadata.yaml @@ -34,7 +34,7 @@ markdown: $(MARKDOWN) cat tmp.yaml no_header > $@ rm no_header header.yaml tmp.yaml -yq: +yq: # On peut même télécharger un petit programme avec notre makefile wget -nc https://github.com/mikefarah/yq/releases/download/3.4.1/yq_linux_amd64 chmod "u+x" yq_linux_amd64 diff --git a/slides/make_avance.md b/slides/make_avance.md index 497dd87dc8f6f1ef7231c694574d22d153c417e3..0ecb2bcdfe59b86577dc5d2af185eaa9fbf0e9a1 100644 --- a/slides/make_avance.md +++ b/slides/make_avance.md @@ -13,6 +13,7 @@ date: 2021-03-03 - Création du code objet à partir des sources. - Création de l'exécutable à partir du code objet. - Tout "gros" projet utilise `make` (pas uniquement en `C`). +- Il existe d'autres outils pour le `C` et d'autres langages (`cmake`, `meson`, `maven`, `cargo`, ...). # Utilisation de `make` @@ -22,22 +23,17 @@ date: 2021-03-03 ::: {.column width="60%"} ```bash -# Les commentaires commencent -# par # - -# exemple est la cible, example.o -# la dépendance -example: example.o -# ligne exécuté à l'appel de -# `make` (`make example`) - gcc -o example example.o - -# exemple.o est la cible, example.c -# et example.h les dépendances -exmaple.o: exmaple.c example.h -# ligne exécuté à l'appel de -# `make example.o` - gcc -c example.c +galaxy: galaxy.o stars.o vec.o + gcc -o galaxy galaxy.o + +galaxy.o: galaxy.c + gcc -c galaxy.c + +stars.o: stars.c stars.h vec.h + gcc -c galaxy.c + +vec.o: vec.c vec.h + gcc -c vec.c ``` ::: @@ -68,7 +64,7 @@ CC = gcc # -pedantic Warning lvl archimage # -O0 Option d'optimisation (0,1,2,3) # -std=c11 Utilisation du standard c11 -# -fsanitize=address Utilisation du standard c11 +# -fsanitize=address Utilisation des sanitizers CFLAGS = -g -Wall -O0 -std=c11 ``` @@ -127,7 +123,7 @@ Ainsi foo: foo.o bar.o gcc -o foo foo.o bar.o $(CFLAGS) $(LDFLAGS) # implicitement pour foo.c et bar.c - $(CC) -c $(CPPFLAGS) $(CFLAGS) + $(CC) -c $(CFLAGS) ``` # Gestion implicites (2/2) @@ -138,7 +134,7 @@ Et pour les dépendances des cibles implicites ça se passe comment? ## Réponse -On peut définir individuellement les +On peut définir individuellement les dites dépendances ## Fonctionnement @@ -146,39 +142,7 @@ Quand `make` rencontre une dépendance sans règle, il va voir dans sa liste de Ainsi ```makefile -foo: foo.o bar.o - gcc -o foo foo.o bar.o $(CFLAGS) $(LDFLAGS) -# implicitement pour foo.c et bar.c - $(CC) -c $(CPPFLAGS) $(CFLAGS) +foo.o: foo.h +bar.o: foo.h bar.h ``` - - -# Macros - -## Les macros - -- Assignation - - ```make - CC = gcc - CFLAGS = -g -Wall -Wextra -pedantic -O0 -std=c11 - LDFLAGS = -lm - ``` -- Utilisation - - ```bash - $(CC) - ``` -- Déclaration à la ligne de commande - - ```bash - make CFLAGS="-O3 -Wall" - ``` - -## Variables internes - -- `$@` : la cible -- `$^` : la liste des dépendances -- `$<` : la première dépendance -- `$*` : le nom de la cible sans extension