Ordre de compilation

Ordre de compilation - C++ - Programmation

Marsh Posté le 08-12-2009 à 15:14:39    

Bonjour,
 
J'aimerais savoir si il est possible, en C++, de fixer l'ordre de compilation des fichiers sources.
Je sais qu'il est possible de définir des priorités de compilation dans la plupart des EDI mais ce n'est pas très pratique si on compte utiliser certains fichiers sous différents EDI.
J'ai un fichier (.cpp) qu'il faut absolument compiler en 1er avant de passer aux autres et je me demandais si il existerait pas une technique avec le pré-processeur par exemple qui permet de forcer la compilation en premier d'un fichier.
 
Pouvez-vous m'aider ?
 
Merci  :whistle:  

Reply

Marsh Posté le 08-12-2009 à 15:14:39   

Reply

Marsh Posté le 08-12-2009 à 15:17:13    

Les Makefiles permettent pas de faire ça entre autres ?


---------------
Kao ..98 - Uplay (R6S) : kao98.7.62x39 - Origin (BF4, BF1) : kntkao98
Reply

Marsh Posté le 08-12-2009 à 15:49:21    

Euh je vois pas pourquoi tu dois absolument compiler un fichier en premier. Détails ?

Reply

Marsh Posté le 08-12-2009 à 15:58:47    

kao98 a écrit :

Les Makefiles permettent pas de faire ça entre autres ?


Je suppose que si ^^ Mais j'ai toujours utilisé les Makefile générés par les EDI...
Ca implique quand même de faire des modifications à la main dans le Makefile à chaque nouveau projet non ?
N'y aurait il pas une macro ou quelque chose qu'on puisse mettre dans le fichier pour le forcer a compiler en premier peu importe le projet ou il est utilisé ? (sans avoir a modifier quelque chose quelque part)
 

Citation :

Euh je vois pas pourquoi tu dois absolument compiler un fichier en premier. Détails ?


C'est un peu délicat à expliquer mais pour faire simple j'ai fait une dll avec wxWidgets et cette dll contient plusieurs classes (1 base + 1 dérivée + 1 dérivée) et l'ordre dans lequel les fichiers de ces classes sont compilés détermine l'ordre dans lequel elles vont être déclarées dans le système RTTI de wxWidgets lors du chargement de cette dll en mémoire.


Message édité par 4fiji le 08-12-2009 à 16:32:39
Reply

Marsh Posté le 08-12-2009 à 17:09:50    

Et l'ordre dans le binaire ça fait foiré ton truc ?

Reply

Marsh Posté le 08-12-2009 à 17:48:25    

Je me demande pourquoi tu as besoin de compiler un fichier avant les autres.  J'ai jamais vu ca.


---------------
The truth is rarely pure and never simple (Oscar Wilde)
Reply

Marsh Posté le 09-12-2009 à 10:41:53    

Un Programmeur a écrit :

Je me demande pourquoi tu as besoin de compiler un fichier avant les autres.  J'ai jamais vu ca.


En fait pour déclarer des classes dans le RTTI de wxWidgets il faut utiliser des macros comme DECLARE/IMPLEMENT_DYNAMIC_CLASS par exemple.
 
On place ca dans le header de la classe (.h).

Code :
  1. #define DECLARE_DYNAMIC_CLASS(name)           \
  2. public:                                      \
  3.   static wxClassInfo ms_classInfo;            \
  4.   static wxObject* wxCreateObject();          \
  5.   virtual wxClassInfo *GetClassInfo() const   \
  6.    { return &name::ms_classInfo; }


 
Et ca avant le code de la classe (.cpp).

Code :
  1. #define IMPLEMENT_DYNAMIC_CLASS(name, basename)                 \
  2. wxObject* name::wxCreateObject()                               \
  3.   { return new name; }                                          \
  4. wxClassInfo name::ms_classInfo(wxT(#name),                     \
  5.             &basename::ms_classInfo, NULL,                      \
  6.             (int) sizeof(name),                                 \
  7.             (wxObjectConstructorFn) name::wxCreateObject);


 
En fait la macro IMPLEMENT_DYNAMIC_CLASS initialise une variable statique puis rajoute le nom de la classe dans la table globale des classes.
Donc le fait que tel ou tel fichier soit compilé avant l'autre fait que le code de la macro IMPLEMENT_DYNAMIC_CLASS pour chaque classe sera appellé dans un ordre bien précis et donc les noms des classes seront rajoutées dans un ordre bien précis dans la table. (or je voudrais que les classes soient dans un ordre a peu près logique genre base -> derive1 -> derive2 et pas derive2 -> base -> derive1)...
 
Bon j'ai maintenant trouvé une solution plus ou moins clean mais ou y'a pas besoin de trifouiller partout qui est de placer les IMPLEMENT_DYNAMIC_CLASS dans un seul .cpp dans l'ordre désiré..

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed