Come testare la versione corrente di GCC al momento della compilazione?
Domanda
Vorrei includere un file diverso a seconda della versione di GCC. Più precisamente voglio scrivere:
#if GCC_VERSION >= 4.2
# include <unordered_map>
# define EXT std
#elif GCC_VERSION >= 4
# include <tr1/unordered_map>
# define EXT std
#else
# include <ext/hash_map>
# define unordered_map __gnu_cxx::hash_map
# define EXT __gnu_cxx
#endif
Non mi interessa di gcc prima della 3.2.
Sono abbastanza sicuro che al momento della pre-elaborazione sia stata definita una variabile, non riesco a trovarla di nuovo.
Soluzione 2
Ok, dopo più ricerche, un modo possibile per farlo è usare __GNUC_PREREQ
definito in features.h
.
#ifdef __GNUC__
# include <features.h>
# if __GNUC_PREREQ(4,0)
// If gcc_version >= 4.0
# elif __GNUC_PREREQ(3,2)
// If gcc_version >= 3.2
# else
// Else
# endif
#else
// If not gcc
#endif
Altri suggerimenti
Esistono diverse macro che devono essere definite per le tue esigenze:
__GNUC__ // major
__GNUC_MINOR__ // minor
__GNUC_PATCHLEVEL__ // patch
Il formato della versione è major.minor.patch, ad es. 4.0.2
La documentazione per questi può essere trovata qui .
Come nota a margine:
Per trovare tutte le macro predefinite:
- Crea file vuoto t.cpp
-
g ++ -E -dM t.cpp
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow