Bonjour,

Je suis face à un problème peu commun aussi je tourne en rond.

Je travaille sous linux avec un programme C++ comportant dans mon répertoire src/ 120 fichiers sources environ.

L'architecture est commune : et j'utilise les autoconf pour gérer tout cela.

J'ai décidé de le créer des sous répertoires pour gérer mes fichiers sources. Je schématise (mes sources ont des noms explicites, comme les sous répertoires hen!!)

Dans src/ j'ai des répertoires A B C D etc ...

chacun contient un makefile.am typique à celui ci:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
noinst_LIBRARIES = libA.a
 
libA_a_SOURCES = \
 A1.cpp \
 A1.hpp \
 A2.cpp \
 A2.hpp\
...
 
libA_a_LIBADD = A1.o A2.o ...
 
AM_CPPFLAGS = -I.. -I../B (cas pour gérer les dépendances de fichiersau niveau des hpp)
le Makefile.am général continent la ligne :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
monprog_LDADD =  \
$(top_builddir)/src/A/A.a \
$(top_builddir)/src/B/B.a \
$(top_builddir)/src/C/C.a \
...
mes sources sont donc dans les répertoires src/ src/A src/B ...

Tout fonctionne. Enfin presque.

Je n'arrive pas à déplacer certains fichiers de src/ dans des sous répertoires src/G par exemple car j’obtiens l'erreur:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
g1.cpp:(.text+0x4e7f): undefined reference to `b1::instance()'
En gros toute dépendance autre que les .hpp pour l'eddition de lien pose problème car l'éditeur ne trouve pas les .o qui sont adna les .a dans les sous répertoires !!

Je me pose trois questions:

- peux on découper ses sources comme je le fais ?

- si oui, comment dire à LDD de prendre en compte les fichiers .a qui sont dans les sous répertoires ?

- comment font les moyens programmes pour gérer leur troupeau de fichiers dans le répertoire src/ ?


Merci déjà car je rame pour trouver une solution !!!