Makefile test-dispatch-week-08

Makefile test-dispatch-week-08

par Amaury Virgile Marc Pierre,
Number of replies: 5

Bonjour,

Lors de l'ajout des dépendances de compilation de unit-test-cpu-dispatch-week08.o, nous avons ajouté le fichier cpu.c, (qui est #include dans unit-test-cpu-dispatch-week08.c).

Cependant lorsqu'on appelle make, on obtient alors le message d'erreur suivant : "multiple definition of 'cpu_init'", et ceci pour plusieurs méthodes (cpu_plug, cpu_cycle et cpu_free). On pense que le problème vient du fait que l'on compile plusieurs fois cpu.c, mais nous n'arrivons pas à y remédier.

Merci d'avance.

Amaury

In reply to Amaury Virgile Marc Pierre

Re: Makefile test-dispatch-week-08

par Jean-Cédric Chappelier,

Tout d'abord : il ne faut jamais faire de #include de .c ; cela reste LA règle.
Mais, comme toujours il y a des exceptions, et là l'exception est :

  1. que nous sommes dans un fichier de tests (lesquels ont souvent des status particuliers)
  2. nous voulons tester des fonctions static (= fonctions uniquement locales à leur propre .c).
Bref. Pour vous répondre :
il est donc évident que, le code contenu dans cpu.c étant DEJA dans unit-test-cpu-dispatch-week08.o, il n'est plus nécessaire de fournir cpu.o.
En clair : ne pas mettre cpu.o dans la listes des objets fournis à l'éditeur de liens pour la création de unit-test-cpu-dispatch-week08.
In reply to Jean-Cédric Chappelier

Re: Makefile test-dispatch-week-08

par David Leonardo Lazar,

Bonsoir,

Nous avons un problème similaire mais avec le message suivant:

In file included from unit-test-alu.c:23:0:
bit.h:27:15: error: redeclaration of enumerator ‘LEFT’
 typedef enum {LEFT = 0
               ^~~~
In file included from alu.h:14:0,
                 from unit-test-alu.c:22:
bit.h:27:15: note: previous definition of ‘LEFT’ was here
 typedef enum {LEFT = 0
               ^~~~
Alors que nous avons aussi essayé de ne pas inclure bit.h dans les dépendances de unit-test-alu.

Comment résoudre / debug ce genre de problème svp ?
Merci beaucoup,
Leo

In reply to David Leonardo Lazar

Re: Makefile test-dispatch-week-08

par Marc Bernard René Gay-Balmaz,

Ton message d'erreur te renseigne sur le fait que bit.h est inclu deux fois, manifestement une fois dans unit-test-alu.c et une fois dans alu.h, qui est lui aussi inclu dans unit-test-alu.c

Donc il y a plusieurs cas possibles, une solution possible serait de ne pas inclure bit.h dans unit-test-alu.c étant donné qu'il est déjà inclu par un autre fichier, mais cette solution a ses limites. Une autre solution est d'utiliser des macros dans ton fichier bit.h. C'est à dire que tu mets au tout début de ton fichier bit.h : 
#ifndef BITH // Il faut ici que le nom soit unique dans tout le projet sans quoi un seul des fichiers avec ce nom sera inclu
#define BITH

et à la fin de ton fichier bit.h, tu ajoutes
#endif //BITH
ce qui va faire que quoi qu'il se passe ton fichier ne sera inclu qu'une seule fois.

Après, cette erreur peut être due au fait que tes dépendences ne sont pas extrêmement bien gérées et la solution que je propose risque de cacher un autre défaut sans le corriger (mais au moins ca devrait compiler)