9 octobre 2018
Résumé. Comment indiquer des options spécifiques pour certaines cibles d’un Makefile.
Dernière révision 15 novembre 2021.
On a un programme principal main.c
#include <stdio.h>
void foo();
void bar();
int main(void)
{
foo();
bar();
return 0;
}qui fait appel à deux fonctions compilées séparément, dans des fichiers sources foo.c et bar.c.
Un Makefile pour la compilation séparée pourrait être
CFLAGS = -Wall
main: main.o foo.o bar.oMais la compilation des sources nécessite des options de compilation différentes. Par exemple les sources font référence à une variable TRACE du pré-processeur. et on veut que l’un des sources (foo.c) soit compilé avec l’option -DTRACE, et lui seul.
Une solution simple est l’affectation spécifique pour une cible. La dernière ligne de ce Makefile
CFLAGS = -Wall
main: main.o foo.o bar.o
foo.o: CFLAGS += -DTRACEindique que l’option -DTRACE doit être ajoutée à CFLAGS lors de la construction de la cible foo.o.
Déroulement du make :
$ make
cc -Wall -c -o main.o main.c
cc -Wall -DTRACE -c -o foo.o foo.c
cc -Wall -c -o bar.o bar.c
cc main.o foo.o bar.o -o mainDans le cas où un Makefile construit plusieurs exécutables, il se peut que certains nécessitent des bibliothèques particulières.
all: premier second troisieme
premier: premier.o a.o b.o
second: second.o b.o c.o
troisieme: troisieme.o a.o b.o c.o
premier: LDFLAGS =-lm
troisieme: LDFLAGS =-lmLes deux dernières lignes peuvent aussi être groupées
premier troisieme: LDFLAGS =-lmhttps://www.gnu.org/software/make/manual/html_node/Target_002dspecific.html