Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
3027 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  Ordre de compilation

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Ordre de compilation

n°1948426
4fiji
Posté le 08-12-2009 à 15:14:39  profilanswer
 

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:  

mood
Publicité
Posté le 08-12-2009 à 15:14:39  profilanswer
 

n°1948427
kao98
...
Posté le 08-12-2009 à 15:17:13  profilanswer
 

Les Makefiles permettent pas de faire ça entre autres ?


---------------
Kao ..98 - Uplay (R6S) : kao98.7.62x39 - Origin (BF4, BF1) : kntkao98
n°1948453
Taz
bisounours-codeur
Posté le 08-12-2009 à 15:49:21  profilanswer
 

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

n°1948459
4fiji
Posté le 08-12-2009 à 15:58:47  profilanswer
 

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
n°1948491
Taz
bisounours-codeur
Posté le 08-12-2009 à 17:09:50  profilanswer
 

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

n°1948505
Un Program​meur
Posté le 08-12-2009 à 17:48:25  profilanswer
 

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)
n°1948634
4fiji
Posté le 09-12-2009 à 10:41:53  profilanswer
 

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é..


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  Ordre de compilation

 

Sujets relatifs
[C++/Makefile] Compilation sous windowsErreur à la compilation en utilisant driver postgresql. Classpath?
Erreur à la compilationProbleme Compilation gcc
Problème de compilation gcc / Repertoires 'include' pas trouvéscross compilation C++ et wrapper C++
[Résolu]pb compilation operator ++[XML] probleme de compilation dans libxml2
Compilation - Importance de l'ordre des libraries dans une listemakefile récursif : ordre de compilation???
Plus de sujets relatifs à : Ordre de compilation


Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)