Skip to content
Snippets Groups Projects
Verified Commit e39df448 authored by orestis.malaspin's avatar orestis.malaspin
Browse files

updated for advanced make

parent 3c0c88d3
No related branches found
No related tags found
No related merge requests found
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
...@@ -11,16 +11,16 @@ REVEALOPTIONS += --self-contained ...@@ -11,16 +11,16 @@ REVEALOPTIONS += --self-contained
REVEALOPTIONS += -V revealjs-url=./reveal.js REVEALOPTIONS += -V revealjs-url=./reveal.js
REVEALOPTIONS += -V theme=white REVEALOPTIONS += -V theme=white
MD=$(wildcard *.md) MD=$(wildcard *.md) # Tous les fichiers .md
HTML=$(MD:%.md=%.html) HTML=$(MD:%.md=%.html) # Pour les fichier html on transforme .md -> .html
PDF=$(MD:%.md=%.pdf) PDF=$(MD:%.md=%.pdf) # Pour les fichier pdf on transforme .md -> .pdf
MARKDOWN=$(MD:%.md=%.markdown) 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 $@ $^ pandoc -s $(OPTIONS) $(PDFOPTIONS) -o $@ $^
%.html: %.md metadata.yaml %.html: %.md metadata.yaml
...@@ -34,7 +34,7 @@ markdown: $(MARKDOWN) ...@@ -34,7 +34,7 @@ markdown: $(MARKDOWN)
cat tmp.yaml no_header > $@ cat tmp.yaml no_header > $@
rm no_header header.yaml tmp.yaml 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 wget -nc https://github.com/mikefarah/yq/releases/download/3.4.1/yq_linux_amd64
chmod "u+x" yq_linux_amd64 chmod "u+x" yq_linux_amd64
......
...@@ -13,6 +13,7 @@ date: 2021-03-03 ...@@ -13,6 +13,7 @@ date: 2021-03-03
- Création du code objet à partir des sources. - Création du code objet à partir des sources.
- Création de l'exécutable à partir du code objet. - Création de l'exécutable à partir du code objet.
- Tout "gros" projet utilise `make` (pas uniquement en `C`). - 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` # Utilisation de `make`
...@@ -22,22 +23,17 @@ date: 2021-03-03 ...@@ -22,22 +23,17 @@ date: 2021-03-03
::: {.column width="60%"} ::: {.column width="60%"}
```bash ```bash
# Les commentaires commencent galaxy: galaxy.o stars.o vec.o
# par # gcc -o galaxy galaxy.o
# 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 galaxy.o: galaxy.c
# et example.h les dépendances gcc -c galaxy.c
exmaple.o: exmaple.c example.h
# ligne exécuté à l'appel de stars.o: stars.c stars.h vec.h
# `make example.o` gcc -c galaxy.c
gcc -c example.c
vec.o: vec.c vec.h
gcc -c vec.c
``` ```
::: :::
...@@ -68,7 +64,7 @@ CC = gcc ...@@ -68,7 +64,7 @@ CC = gcc
# -pedantic Warning lvl archimage # -pedantic Warning lvl archimage
# -O0 Option d'optimisation (0,1,2,3) # -O0 Option d'optimisation (0,1,2,3)
# -std=c11 Utilisation du standard c11 # -std=c11 Utilisation du standard c11
# -fsanitize=address Utilisation du standard c11 # -fsanitize=address Utilisation des sanitizers
CFLAGS = -g -Wall -O0 -std=c11 CFLAGS = -g -Wall -O0 -std=c11
``` ```
...@@ -127,7 +123,7 @@ Ainsi ...@@ -127,7 +123,7 @@ Ainsi
foo: foo.o bar.o foo: foo.o bar.o
gcc -o foo foo.o bar.o $(CFLAGS) $(LDFLAGS) gcc -o foo foo.o bar.o $(CFLAGS) $(LDFLAGS)
# implicitement pour foo.c et bar.c # implicitement pour foo.c et bar.c
$(CC) -c $(CPPFLAGS) $(CFLAGS) $(CC) -c $(CFLAGS)
``` ```
# Gestion implicites (2/2) # Gestion implicites (2/2)
...@@ -138,7 +134,7 @@ Et pour les dépendances des cibles implicites ça se passe comment? ...@@ -138,7 +134,7 @@ Et pour les dépendances des cibles implicites ça se passe comment?
## Réponse ## Réponse
On peut définir individuellement les On peut définir individuellement les dites dépendances
## Fonctionnement ## Fonctionnement
...@@ -146,39 +142,7 @@ Quand `make` rencontre une dépendance sans règle, il va voir dans sa liste de ...@@ -146,39 +142,7 @@ Quand `make` rencontre une dépendance sans règle, il va voir dans sa liste de
Ainsi Ainsi
```makefile ```makefile
foo: foo.o bar.o foo.o: foo.h
gcc -o foo foo.o bar.o $(CFLAGS) $(LDFLAGS) bar.o: foo.h bar.h
# implicitement pour foo.c et bar.c
$(CC) -c $(CPPFLAGS) $(CFLAGS)
``` ```
# 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
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment