[C++] Compilation conditionnelle

Aurélien-A

Membre confirmé
19 Mai 2005
76
3
41
Edinburgh
www.billou-net.info
Salut,

j'aimerais, dans un programme Cpp donner des instructions de compilation conditionnelles pour améliorer la portabilité d'un programme selon l'algorithme suivant:

# SI plateforme = MACOSX
alors #DEFINE CONSTANTE VALEUR1
# SINON
#DEFINE CONSTANTE VALEUR2

Mais je bloque sur l'utilisation de IFDEF ? IF ?

Je ne sais pas quel valeur peut faire reconnaître Mac OS X.

Le but est de pouvoir remplacer l'instruction #include <Allegro/allegro.h> sur Mac par #include <allegro.h> sous un autre environnement (Win, Linux).

Merci pour les conseils, et éventuellement un petit lien pour m'aider à mieux comprendre la précompilation C/CPP, car Google n'a pas été mon meilleur ami sur ce coup là...

Aurélien
 
en fait faut que tu change une ligne de ton code avant de le compiler:
Bloc de code:
#DEFINE PLATEFORME //c'est cette ligne que tu change en mettant : MAC, WIN, ou TUX

#IFDEF WIN
#DEFINE CONSTANTE VALEUR_WIN
#ENDIF
#IFDEF TUX
#DEFINE CONSTANTE VALEUR_TUX
#ENDIF
#IFDEF MAC
#DEFINE CONSTANTE VALEUR_MAC
#ENDIF

Voilà :)
 
Et si tu ne veux pas définir le nom de la plate-forme en dur dans ton code, tu peux utiliser l'option -D du compilateur : gcc ... -DTUX ... A ce moment il suffit de faire le choix dans le makefile.

man gcc pour les explications complémentaires.
 
truk2oof a dit:
en fait faut que tu change une ligne de ton code avant de le compiler:
Bloc de code:
#DEFINE PLATEFORME //c'est cette ligne que tu change en mettant : MAC, WIN, ou TUX

#IFDEF WIN
#DEFINE CONSTANTE VALEUR_WIN
#ENDIF
#IFDEF TUX
#DEFINE CONSTANTE VALEUR_TUX
#ENDIF
#IFDEF MAC
#DEFINE CONSTANTE VALEUR_MAC
#ENDIF

Voilà :)

J'ignorais donc que ça se faisait manuellement. Je pensais que le compilateur gcc pouvait déterminer sous quelle plateforme il compile. Je travaille sur ce projet de jeu en binôme avec une personne qui tourne sous WIN / Dev CPP. Merci pour cette astuce, la portabilité c'est pas évident à maintenir.

Aurélien
 
Aurélien-A a dit:
J'ignorais donc que ça se faisait manuellement. Je pensais que le compilateur gcc pouvait déterminer sous quelle plateforme il compile. Je travaille sur ce projet de jeu en binôme avec une personne qui tourne sous WIN / Dev CPP. Merci pour cette astuce, la portabilité c'est pas évident à maintenir.

Aurélien


Tu peut deja tester le processeur via la constante prédéfinie i386
par exemple :

#if defined(i386)
#define MACINTEL
#else
#define MACPPC
#endif

Jette aussi un oeil sur :
http://developer.apple.com/document...gcc-4.0.1/cpp/Standard-Predefined-Macros.html


Cordialement
 
Aurélien-A a dit:
Salut,

j'aimerais, dans un programme Cpp donner des instructions de compilation conditionnelles pour améliorer la portabilité d'un programme selon l'algorithme suivant:

# SI plateforme = MACOSX
alors #DEFINE CONSTANTE VALEUR1
# SINON
#DEFINE CONSTANTE VALEUR2

Mais je bloque sur l'utilisation de IFDEF ? IF ?

Je ne sais pas quel valeur peut faire reconnaître Mac OS X.

Le but est de pouvoir remplacer l'instruction #include <Allegro/allegro.h> sur Mac par #include <allegro.h> sous un autre environnement (Win, Linux).

Merci pour les conseils, et éventuellement un petit lien pour m'aider à mieux comprendre la précompilation C/CPP, car Google n'a pas été mon meilleur ami sur ce coup là...

Aurélien

tu peux utiliser la constante __APPLE__
ce qui donne:
Bloc de code:
#if defined ( __APPLE__ )
#include <Allegro/allegro.h>
#else
#include <allegro.h>
#endif