2 votes

Makefile, ajout d'en-têtes situés dans le répertoire parent (pas autorisé à se déplacer à l'intérieur !)

dir1
--- myheader1.h
--- myheader2.h
    src
    --- prog.c
    --- makefile

prog.c

#include <stdio.h>
#include "myheader1.h"
#include "myheader2.h"

int main()
{
    func1();
    func2();
    return 0;
}

monen-tête1.h

void func1()
{
    printf("Header1\n");
}

myheader2.h

void func2()
{
    printf("Header2\n");
}

En cherchant une solution sur la façon d'ajouter un en-tête à partir du répertoire parent j'ai trouvé este question. Mais cela n'a pas fonctionné pour moi et je reçois toujours l'erreur de ne pas trouver le fichier d'en-tête.

Aucune règle pour la cible 'myheader1.h', requise par 'prog.o'. Arrêtez.

makefile

CFLAGS = -c -Wall -I.. myheader1.h

prog : prog.o
     cc -o prog prog.o

prog.o : prog.c myheader1.h
     cc $(CFLAGS) prog.c

Qu'est-ce que je fais de mal ? et comment ajouter le deuxième en-tête sans que les lignes soient extrêmement longues ou moches ?

4voto

melpomene Points 5675
prog.o : prog.c myheader1.h

Cette ligne dit prog.o dépend de deux fichiers, prog.c y myheader1.h . prog.c existe, mais myheader1.h ne le fait pas (du moins pas dans le même répertoire).

Il devrait être

CFLAGS = -Wall -I..

prog.o : prog.c ../myheader1.h
        cc $(CFLAGS) -c prog.c

Nota:

  • ../myheader1.h dans la liste des conditions préalables, et non myheader1.h
  • les en-têtes ne doivent pas du tout être listés sur la ligne de commande du compilateur
  • -c n'a pas vraiment sa place dans CFLAGS

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X