SHELL = /bin/sh .SUFFIXES: .SUFFIXES: .c .o .PHONY = run .PHONY = clean .PHONY: Makefile CC=gcc CFLAGS=`pkg-config --cflags gtk4 --libs gtk4` WARNINGS = -Wall DEBUG = -ggdb -fno-omit-frame-pointer OPTIMIZE = -O2 all: exec exec.o: hot.c warm.c cold.c main.c Makefile $(CC) $(CFLAGS) $(WARNINGS) $(DEBUG) $(OPTIMIZE) hot.c warm.c cold.c -o $@ main.c clean: rm -f exec.o # Builder will call this to install the application before running. install: echo "Installing is not supported" # Builder uses this target to run your application. run: exec.o ./exec.o #------------------------------------------------------------------------------# # To study : how can the following commands be modified ? # #------------------------------------------------------------------------------# #SHELL = /bin/sh #.SUFFIXES: #.SUFFIXES: .c .o .h # is .h useful ? #.PHONY = run #.PHONY = clean #.PHONY: Makefile #CC=gcc #CFLAGS=`pkg-config --cflags gtk4 --libs gtk4` #WARNINGS = -Wall #DEBUG = -ggdb -fno-omit-frame-pointer #OPTIMIZE = -O2 # in exec.o: # $(WARNINGS) $(DEBUG) $(OPTIMIZE) < ne sont pas indispensables # si le $@ est supprimé, main.cest modifié #all: # exec #install: # echo "Installing is not supported" #------------------------------------------------------------------------------# # Personnal notes & links # #------------------------------------------------------------------------------# # gcc $( pkg-config --cflags gtk4 ) -o exec main.c $( pkg-config --libs gtk4 ) # https://www.gnu.org/software/make/manual/ # Makefiles contain five kinds of things: # explicit rules, implicit rules, variable definitions, directives and comments. # Variables automatiques -------------------------------------------------- # $@ fait référence à la cible de la règle (au nom de la cible). # $< fait référence à la première dépendance. # $? fait référence aux noms de touess les dépendances plus récentes que la cible. # = les fichiers qui ont été modifiés après la compilation de code la plus récente # $^ fait référence aux noms de touess les dépendances avec des espaces entre eux. # Variables implicites ------------------------------------------------- # VPATH Équivalent utilitaire de la variable PATH de Bash. Vide par défaut. # Les chemins sont séparés par le signe deux-points (:). # CC Le programme pour compiler des fichiers C. # La valeur par défaut est cc. (Habituellement, cc pointe vers gcc.) # CPP Le programme qui exécute le préprocesseur C. # La valeur par défaut est $ (CC) -E. # LEX Le programme qui transforme les grammaires lexicales en code source. # La valeur par défaut est lex. (Vous devriez remplacer cela par flex.) # LINT Le programme qui lint votre code source. La valeur par défaut est lint. # RM La commande pour supprimer un fichier. La valeur par défaut est rm -f. # CFLAGS Contient tous les indicateurs du compilateur C (cc). # CPPFLAGS tous les indicateurs du préprocesseur C. # .PHONY Spécifie des cibles qui ne ressemblent pas au nom d'un fichier. # Un exemple est la cible "make clean" ; où clean est une valeur de .PHONY # Syntaxe de Base # Règles : Une règle se compose d'une cible, des dépendances et des commandes. # Elle est généralement structurée comme suit : # cible: dépendances # commande # # La cible (target) est le fichier à générer, # les dépendances (prerequisites) sont les fichiers requis pour construire la cible # et les commandes (recipe) sont les instructions exécutées pour créer la cible. # # A simple makefile consists of “rules” with the following shape: # target ... : prerequisites ... # recipe # ... # A target is usually the name of a file that is generated by a program; # examples of targets are executable or object files. # A target can also be the name of an action to carry out, such as ‘clean’ # accessoirement : https://blog.stephane-robert.info/docs/makefile/ & /docs/task/