Makefile inclusions cycliques

Makefile inclusions cycliques

par David Leonardo Lazar,
Number of replies: 2

Bonsoir,

J’ai un problème dans mon Makefile car :

Dans gameboy.h j’ai #include "bootrom.h" car j’appelle bootrom_init() dans gameboy_create().

Dans bootrom.h j’ai #include "gameboy.h" (ce fichier vient de provided) car j’appelle le write_listener de la gameboy dans bootrom_bus_listener().

Cela génère des inclusions cycliques qui produisent le code d’erreur suivant et m'empéche de make unit-test-timer et unit-test-cartridge:

 In file included from gameboy.h:17:0,
                 from cpu-storage.c:11:
bootrom.h:81:26: error: unknown type name ‘gameboy_t’; did you mean ‘memory_t’?
 int bootrom_bus_listener(gameboy_t* gameboy, addr_t addr);
                          ^~~~~~~~~
                          memory_t
<builtin>: recipe for target 'cpu-storage.o' failed

Merci beaucoup de me dire comment régler ce problème.

Leo


In reply to David Leonardo Lazar

Re: Makefile inclusions cycliques

par David Leonardo Lazar,
In reply to David Leonardo Lazar

Re: Makefile inclusions cycliques

par Jean-Cédric Chappelier,

La réponse générale à ce genre de problème est de passer par une prédéclaration (cf cours sur les listes chaînées) au lieu d'un include, genre :
struct machin;
au lieu de
#include "machin.h"

Bien sûr cela suppose n'utiliser que des pointeurs sur struct machin dans le fichier en question.