2010-03-25 17 views
4

Je travaille avec du code Fortran qui doit fonctionner avec différents compilateurs Fortran (et qui interagit avec le code C++ et Java). Actuellement, nous travaillons avec gfortran et g95, mais je suis en train de rechercher ce qu'il faudrait faire pour le faire fonctionner avec ifort, et le premier problème que je rencontre est de savoir comment déterminer dans le code source s'il utilise ifort ou ne pas.Quelle est la macro pour distinguer ifort des autres compilateurs Fortran?

Par exemple, j'ai actuellement ce morceau de code:

#if defined(__GFORTRAN__) 
// Macro to add name-mangling bits to fortran symbols. Currently for gfortran only 
#define MODFUNCNAME(mod,fname) __ ## mod ## _MOD_ ## fname 
#else 
// Macro to add name-mangling bits to fortran symbols. Currently for g95 only 
#define MODFUNCNAME(mod,fname) mod ## _MP_ ## fname 
#endif // if __GFORTRAN__ 

Quelle est la macro pour ifort? J'ai essayé IFORT, mais ce n'était pas correct, et deviner plus ne semble pas productif. J'ai également essayé de lire la page man, en utilisant ifort -help, et Google.

+2

Je sais que je suis très en retard à cette question, mais je voulais juste poster une note rapide sur le style: le cas par défaut dans une clause '#if defined' devrait être une erreur pour éviter tout comportement inattendu. Essayez donc d'utiliser quelque chose comme '#if defined (__ GFORTRAN__) ... #elif defined (__ INTEL_COMPILER) ... #else ... #error" La macro de gestion des noms n'est pas définie pour votre compilateur. "' – Chris

+0

@Chris: very bon point –

Répondre

2

Selon leurs documents, ils définissent __INTEL_COMPILER = 910. Le 910 peut être un numéro de version, mais vous pouvez probablement juste #ifdef dessus.

Je dois noter que ifort n'autorise pas les macros à moins que vous ne l'activiez explicitement avec le drapeau/fpp.

+0

Oui, il s'agit d'un ID de version. Pour ifort version 11.1, la valeur est 1110. Vous pouvez également obtenir des macros/pré-traitement en utilisant le type de fichier "F90" - majuscule. –

+0

Par "filetype", voulez-vous dire l'extension du fichier, ou parlez-vous d'un drapeau de compilateur? –