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.o
Mais 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 += -DTRACE
indique 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 main
Dans 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 =-lm
Les deux dernières lignes peuvent aussi être groupées
premier troisieme: LDFLAGS =-lm
https://www.gnu.org/software/make/manual/html_node/Target_002dspecific.html