Afficher la pageAnciennes révisionsLiens de retourHaut de page Cette page est en lecture seule. Vous pouvez afficher le texte source, mais ne pourrez pas le modifier. Contactez votre administrateur si vous pensez qu'il s'agit d'une erreur. ====== Makefile ====== * [[https://gl.developpez.com/tutoriel/outil/makefile/]] * [[https://renenyffenegger.ch/notes/development/make/index]] * [[https://connect.ed-diamond.com/GNU-Linux-Magazine/glmf-247/c-est-l-histoire-d-un-make...|C’est l’histoire d’un make…]] Les commandes sont à indenter avec des tabulations. ==== Afficher ce que lance Make ==== <code bash> make SHELL='sh -x' <commande> </code> ou (au moins avec cmake): <code bash> make VERBOSE=1 </code> 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: <code bash> 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) </code> Voir la doc: [[https://www.gnu.org/software/make/manual/html_node/Implicit-Variables.html]] ==== Variables internes ==== * ''$@'': cible * ''$<'': première dépendance * ''$^'': toutes les dépendances * ''$?'': liste des dépendances plus récentes que la cible ==== Règles conditionnelles ==== [[https://ftp.gnu.org/old-gnu/Manuals/make-3.79.1/html_chapter/make_7.html|Source]] <code make> target: ifeq ($(ENV_VAR), 1) # Something else # Another thing endif </code> ==== Éliminer l'extension d'une cible ==== Il suffit d'utiliser la commande ''basename'' provenant de coreutils ([[https://stackoverflow.com/questions/13995906/get-filename-without-extension-within-makefile|source]]) : <code make> RR-babla.pdf: rr.tex rubber --pdf --jobname $(basename $@) $< # rubber adds itself the .pdf extension to the output file </code> ==== Appeler une commande dans une règle ==== <code make> foo: echo $(shell date) </code> makefile.txt Dernière modification : 2024/02/24 18:50de phsw