8
votes

Détecter le compilateur avec #Ifdef

J'essaie de créer un petit code qui fonctionne sur plusieurs plates-formes et compilateurs. J'utilise des assertions, dont la plupart peuvent être éteintes, mais lors de la compilation avec la compilation de PGI PGICPP à l'aide de -mp pour OpenMP support, il utilise automatiquement le - no_exceptions < / Code> Option: partout dans mon code avec une instruction "lancer" génère une erreur de compilateur fatale. ("La prise en charge du traitement des exceptions est désactivée")

Y a-t-il un définir D macro i peut tester pour masquer les instructions lancer sur pgi? Je travaille habituellement avec GCC, qui a gcc_version et similaire. Je ne trouve aucune documentation décrivant ces macros en PGI.


3 Réponses :


4
votes

Vous pouvez essayer ceci pour voir quelles macros sont prédéfinies par le compilateur: xxx

peut-être que cela révélera une macro appropriée que vous pouvez utiliser.


2 commentaires

En effet. La sortie de celle-ci est affichée à pgroup.com/support/tprs_70.htm , et Il y a PGI (mentionné ci-dessus) et __PGIC ​​, PGIC_MINOR et PGIC_PATCHLEVEL , qui donnent les parties majeures, mineures et de patte de la version du compilateur numéro.


Et il y a la joie de l'analyseur prenant des doubles traits de soulignement et de faire des choses divertissantes avec eux. 'PGI' est préfixé avec double soulignement; Les trois autres sont à la fois préfixés et suffixés avec eux.



0
votes

Avez-vous regardé les en-têtes Boost? En supposant qu'ils soutiennent PGI, ils auront trouvé un moyen de le détecter. Vous pouvez utiliser cela. Je commencerais à rechercher quelque part dans boost / config .


0 commentaires