makefile

Ceci est une ancienne révision du document !


Makefile

Les commandes sont à indenter avec des tabulations.

make SHELL='sh -x' <commande>

ou (au moins avec cmake):

make VERBOSE=1

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

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

  • $@: cible
  • $<: première dépendance
  • $^: toutes les dépendances
  • $?: liste des dépendances plus récentes que la cible

Source

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

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
foo:
    echo $(shell date)
  • makefile.1681487787.txt.gz
  • Dernière modification : 2023/04/14 17:56
  • de phsw