Quelle définition de pré-processeur est fournie par -fopenmp?

J’ai un code qui peut fonctionner avec (ou sans) OpenMP – cela dépend de la manière dont l’utilisateur configure le fichier Make. S’ils veulent utiliser OpenMP, ils ajoutent simplement -fopenmp à CFLAGS et CXXFLAGS .

J’essaie de déterminer quelle macro de préprocesseur je peux utiliser pour dire quand -fopenmp est en vigueur. L’en omp.h tête omp.h ne semble pas très intéressant:

 $ cat /usr/lib/gcc/x86_64-linux-gnu/4.8/include/omp.h | grep define #define OMP_H 1 #define _LIBGOMP_OMP_LOCK_DEFINED 1 # define __GOMP_NOTHROW throw () # define __GOMP_NOTHROW __atsortingbute__((__nothrow__)) 

Et je ne peux pas demander au préprocesseur de proposer quelque chose d’utile:

 $ cpp -dM -fopenmp </dev/null | grep -i omp #define __GCC_HAVE_SYNC_COMPARE_AND_SWAP_1 1 #define __GCC_HAVE_SYNC_COMPARE_AND_SWAP_2 1 #define __GCC_HAVE_SYNC_COMPARE_AND_SWAP_4 1 #define __GCC_HAVE_SYNC_COMPARE_AND_SWAP_8 1 #define __STDC_IEC_559_COMPLEX__ 1 $ cpp -dM -fopenmp </dev/null | grep -i version #define __GXX_ABI_VERSION 1002 #define __VERSION__ "4.8.2" 

Quelle définition de pré-processeur est -fopenmp ?


Le problème que j’essaie de résoudre est simplement de se connecter:

 #if defined() cout << "Compiled and linked with OpenMP" << endl; #endif 

Et j’ai besoin de connaître la définition pour simplement #include car il appartient à l’utilisateur d’append (ou d’omettre) -fopenmp .


Ceci est similaire à Comment savoir si OpenMP fonctionne? Mais je suis intéressé par le temps de compilation et non par la post-construction ou l’exécution.

Remarque : ce projet n’utilise pas Boost, n’utilise pas Autotools et n’utilise pas Cmake. Il utilise simplement un fichier makefile.

Votre grep était trop spécifique, vous auriez dû chercher “openmp”.

Ou plutôt, cing cpp -dM -fopenmp et cpp -dM un seul diff:

 #define _OPENMP 201107 

Ce qui devrait être exactement ce que vous recherchez.