# [C++] Compilation conditionnelle



## Aurélien-A (13 Avril 2006)

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


----------



## p4bl0 (13 Avril 2006)

en fait faut que tu change une ligne de ton code avant de le compiler:

```
#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à


----------



## ntx (13 Avril 2006)

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.


----------



## Aurélien-A (13 Avril 2006)

truk2oof a dit:
			
		

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



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


----------



## Didier Guillion (14 Avril 2006)

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


----------



## tatouille (14 Avril 2006)

Didier Guillion a dit:
			
		

> Tu peut deja tester le processeur via la constante prédéfinie i386
> par exemple :
> 
> #if defined(i386)
> ...



http://plumber.gnu-darwin.org/pub/binaries/python/cpu/darwin/machine_info.c


----------



## canari (16 Avril 2006)

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



tu peux utiliser la constante __APPLE__
ce qui donne:

```
#if defined ( __APPLE__ )
#include <Allegro/allegro.h>
#else
#include <allegro.h>
#endif
```


----------

