2017-08-23 2 views
0

En supposant que j'ai cette example.h:Make - Quels fichiers dois-je indiquer comme prérequis pour une cible avec plusieurs instructions #include?

// example.h 
#include "a.h" 
#include "b.h" 
#include "c.h" 
#include "d.h" 
#include "e.h" 

Et example.c:

// example.c 
#include "example.h" 
#include "a.h" 
#include "b.h" 
#include "c.h" 
#include "d.h" 
#include "e.h" 

Si mon Makefile ressembler à ceci? :

example.o : example.h example.c 
    gcc -c example.c -o example.o 

Ou devrait-il ressembler à ceci? :

example.o : example.h example.c a.h b.h c.h d.h e.h 
    gcc -c example.c -o example.o 

Répondre

1

1) Il devrait ressembler à votre deuxième version:

example.o : example.h example.c a.h b.h c.h d.h e.h 
    gcc -c example.c -o example.o 

2) Il n'y a aucune raison pour que la même déclaration #include à apparaître dans les deux example.h et example.c et #include redondantes déclarations sont Kruft et devrait être enlevé. Pour la sécurité, mettez-les dans example.h; pour plus d'efficacité, mettez-les dans example.c quand vous le pouvez. (Je ne vais pas entrer dans les détails de quand vous pouvez ici, mais le compilateur vous dira quand vous vous trompez.)

3) Si vous ne voulez pas maintenir cette liste d'en-têtes dans le fichier make, gcc et Make peuvent s'en occuper pour vous. Voici un exemple, mais cela est an advanced technique, donc je vous conseille de ne pas l'utiliser avant de comprendre comment cela fonctionne:

example.o : example.c 
    gcc -MMD -c example.c -o example.o 

-include *.d 
+0

J'utilise maintenant ce fichier: https://pastebin.com/07Ccwkft que pensez-vous? –

+0

@ J.Doe: Je vois quelques points difficiles. Je suppose qu'il ne reconstruira pas les fichiers au bon moment. – Beta

+0

que voulez-vous dire? –