Table des matières

Makefile

Les commandes sont à indenter avec des tabulations.

Afficher ce que lance Make

make SHELL='sh -x' <commande>

ou (au moins avec cmake):

make VERBOSE=1

Mode verbeux natif de make: jouer avec l'option --debug|-d.

Règles implicites

Pour chaque truc.c, Makefile sait implicitement qu'il faut exécuter $(CC) $(CFLAGS) $< -o $@ $(LDLIBS)

Il suffit alors d'avoir ce genre de Makefile:

CC=gcc
CFLAGS=-W -Wall -ansi -pedantic # pour exécuter du shell, utiliser l'anti-apostrophe
LDFLAGS=  # Extra flags to give to compilers when they are supposed to invoke the linker, ‘ld’, such as -L.
LDLIBS= # les -lfoo
EXEC=hello
 
all: $(EXEC)
 
clean:
    rm -f $(EXEC)

Voir la doc: https://www.gnu.org/software/make/manual/html_node/Implicit-Variables.html

Variables internes

Règles conditionnelles

Source

target:
ifeq ($(ENV_VAR), 1)
	# Something
else
	# Another thing
endif

Éliminer l'extension d'une cible

Il suffit d'utiliser la commande basename provenant de coreutils (source) :

RR-babla.pdf: rr.tex
	rubber --pdf --jobname $(basename $@) $<  # rubber adds itself the .pdf extension to the output file

Appeler une commande dans une règle

foo:
    echo $(shell date)