2008-11-03 12 views
27

Ich möchte je nach Version von GCC eine andere Datei hinzufügen. Genauer möchte ich schreiben:Wie teste ich zur Kompilierzeit die aktuelle Version von GCC?

#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 

ist mir egal gcc vor 3.2.

Hinweis: Ich bin ziemlich sicher, dass eine Variable zur Vorverarbeitungszeit dafür definiert ist, ich kann es einfach nicht wieder finden.

Antwort

26

Ok, nach weiteren Suchvorgängen ist es eine __GNUC_PREREQ definiert 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 
+2

mit der Leider ist dieser Code nicht clang Compiler, der '__GNUC__' definiert, aber' features.h' nicht enthält. – Gil

+0

Nun, dieser Code soll die Version von GCC kennen, also ist es nicht verwunderlich, dass es fehlschlägt, wenn der Clan sich teilweise als GCC ausgibt. – PierreBdR

+2

Sorry, es scheint, ich habe mich geirrt. Das 'features.h'-Include ist einfach eine Linux-spezifische Sache und sollte nicht für irgendeinen Code verwendet werden, der auf anderen Plattformen kompiliert werden soll. – Gil

41

Es gibt eine Reihe von Makros, die für Ihre Bedürfnisse klar definiert werden:

__GNUC__    // major 
__GNUC_MINOR__  // minor 
__GNUC_PATCHLEVEL__ // patch 

Das Versionsformat ist major.minor.patch, z.B. 4.0.2

Die Dokumentation dazu finden Sie unter here.

16

Als Randbemerkung:

alle vordefinierten Makros zu finden:

  • leere Datei T.cpp
  • g++ -E -dM t.cpp erstellen
+15

Ohne eine leere Datei zu erstellen: g ++ -E -dM - JesperE

+0

Dies bietet keine Antwort auf die Frage. Um einen Autor zu kritisieren oder um Klärung zu bitten, hinterlasse einen Kommentar unter seinem Beitrag. –

+0

@LawrenceAiello: Ihr Kommentar ist nur 7 Jahre zu spät. –

Verwandte Themen