Wie erkennt man die libstdc ++ Version in Clang?

8

Ich würde gerne eine "portable" C ++ - Bibliothek in Clang schreiben. "Portable" bedeutet, dass ich (im C-Präprozessor) feststelle, welche C ++ - Funktionen in der Kompilierungsumgebung verfügbar sind und diese Funktionen verwenden oder meine Problemumgehungen bereitstellen. Dies ist ähnlich den Boost-Bibliotheken.

Das Vorhandensein einiger Features hängt jedoch nicht von der Sprache ab, sondern von der Implementierung der Standardbibliothek. Insbesondere interessiert mich:

  • type Merkmale (welche von ihnen sind verfügbar und mit welcher Rechtschreibung)
  • wenn initializer_list ist constexpr .

Ich finde das problematisch, weil Clang standardmäßig keine eigene Implementierung der Standardbibliothek verwendet: es verwendet libstdc ++. Während Clang Preprozessor-Makros __GNUC__ , __GNUC_MINOR__ , __GNUC_PATCHLEVEL__ vordefiniert hat, sind sie fest auf die Werte 4, 2 bzw. 1 geschrieben, und sie sagen mir wenig über die verfügbaren libstdc ++ - Funktionen.

Wie kann ich den Clang-Präprozessor einchecken, welche Version von libstdc ++ er verwendet?

    
Andrzej 07.02.2014, 08:16
quelle

1 Antwort

1

Clang verfügt über eine eigene Standardbibliotheksimplementierung, die libc ++ heißt. Sie können es verwenden, indem Sie -stdlib=libc++ zu Ihrem Kompilierbefehl hinzufügen.

Dazu gibt es verschiedene Möglichkeiten, die Clang / libstdc ++ C ++ - Unterstützung zu überprüfen:

  1. Clang verfügt über das __has_feature -Makro (und seine Freunde), mit denen Sprachfunktionen erkannt werden können und Spracherweiterungen.
  2. Libstdc ++ hat seine eigenen Versionsmakros, siehe die Dokumentation . Sie müssen eine libstdc ++ - Kopfzeile einfügen, um diese zu definieren.
  3. GCC hat seine Versionsmakros, die Sie bereits entdeckt haben, aber diese müssten manuell mit der Dokumentation verglichen werden.

Und das hat mich zwei Minuten lang gegoogelt.

    
rubenvb 07.02.2014, 08:34
quelle

Tags und Links