Je crois que je vais tenter de compiler le projet avec CMake (
http://www.cmake.org). En plus, il semblerait que ca compile facilement sur Windows ...
edit: je ferais bien aussi un fichier Sconscript (
http://www.scons.org)
J'ai aussi développé une nouvelle version de make_headers qui utilise désormais gcc (`gcc -E`) pour la phase de précompilation (#define, #include et tout le reste). Et ca a l'air de mieux marcher.
Mais du coup, ca pose un petit problème. je prends un exemple (pas testé):
Au début de "raydium/ode.c" il faut inclure les headers de tous les autres fichiers "raydium/*.c" car il se peut que "raydium/ode.c" utilise certaines fonctions provenant d'autres fichiers. "raydium/ode.c" va donc inclure "raydium/index.h" qui est généré à partir de "raydium/index.c".
Le problème c'est que "raydium/index.h" va aussi définir toutes les fonctions de "rayium/ode.c" puisque "raydium/index.c" inclue "raydium/ode.c". Cela pose un problème à la compilation.
Du coup je vois mal comment faire pour contourner ce problème ...
J'envisage une solution qui serait à faire à la main:
une constante (SEPARATE_COMPILE ?) serait définie lorsque la compilation se ferait de manière séparée. Ainsi, on pourrait ajouter eu début de chaque fichier "raydium/*.c":
Code:
#ifdef SEPARATE_COMPILE
#include "monfichier.h"
#include "monautrefichier.h"
#include "montroisièmefichier.h"
...
#endif
On pourrait aussi modifier "raydium/index.c" pour que les fichiers *.c ne soient pas inclus si on fait une compilation séparée:
Code:
#ifndef SEPARATE_COMPILE
#include "monfichier.c"
#include "monautrefichier.c"
#include "montroisièmefichier.c"
...
#endif
Donc au final, que se passerait il ?
- On crée des fichiers "raydium/*.h" pour touts les fichiers "raydium/*.c" (avec #define SEPARATE_COMPILE) plus un fichier "raydium.h" qui servira à compiler les applications utilisant libraydium
- On compilerait les fichiers "raydium/*.c" et on obtient des fichiers "raydium/*.o" (sous linux)
- Avec touts ces fichiers *.o on crée une bibliothèque statique et dynamique
- Pour créer uen application, on utilise "libraydium.h"
- Si on veut le support php on ajoute #include "raydium/reg_api.c" et ca devrait marcher
- On compile et on lie avec libraydium
Par contre, sous Windows il y a un problème: je crois qu'on ne peut pas utiliser des variables externes d'un .dll . Comment faire ?
Idée: si on compile statiquement sous Win, on peut utiliser des variables externes ? si oui, cela résous le problème.
Mildred qui va se coucher en attendant des réponses et que ces idées murissent.