2012-07-30 11 views
23

Wie kann ich herausfinden, was das -march Standardargument für die aktuelle Architektur ist, wenn ich keine liefern?Aktuelle GCC-Architektur erhalten

+1

Liefert 'gcc -v' genügend Informationen? – Jens

Antwort

55

gcc -dumpmachine gibt Ihnen das Zieltriplett, z.B. x86_64-unknown-linux-gnu

Wenn gcc -v zeigt GCC mit einer --with-arch Option konfiguriert wurde (oder --with-arch-32 und/oder --with-arch-64), dann ist das, was der Standard sein wird.

Ohne --with-arch Option (und wenn es keine Datei benutzerdefinierte Spezifikationen im Einsatz), dann der Bogen verwendet wird, die Standardeinstellung für das Ziel sein.

Für x86, bis einschließlich GCC 4.4, war der Standard für 32-Bit--march=i386 und für 64-Bit war -march=x86-64 (man beachte den Bindestrich anstelle von Unterstrichen.)

Für x86 mit GCC 4.5 und späteren Versionen Der Standardbogen wird aus dem Zieltriplet abgeleitet, dh die Konfiguration für i586-pc-linux-gnu bedeutet, dass der Standardwert -march=i586 ist. Die Konfiguration für core2-pc-linux-gnu bedeutet, dass der Standardwert -march=core2 ist.

Einige andere Plattformen leiten auch den Standardbogen vom Zieltriplet ab (und haben dies seit GCC 4.4 getan), also z.B. ultrasparc2-sun-solaris2.10 bedeutet -march=ultrasparc2.

+3

Die 'gcc-dumpmachine' Optionen sind perfekt. Ein weiteres Beispiel, wie eine zwei Sekunden lange Suche auf Stackoverflow ein weiteres Lesen der gcc Manpage verhindert! –

+0

Ich habe das Handbuch gelesen und es genossen. Was ich damit meinte, war, dass Sie stackoverflow mit mehr menschlichen Suchbegriffen durchsuchen können, als die Manpage zu durchlaufen. Zum Beispiel habe ich 'gcc-dumpmachine' zuvor verwendet, konnte mich aber nicht an den Argumentnamen erinnern. Allerdings kann ich in der man-Seite manchmal nicht nach dem richtigen Argument suchen. Vielleicht sollte ich ändern "vermeidet ein anderes Lesen von" zu "vermeidet eine andere Suche durch";) –

+0

Ah ja, fair genug, das ist sicherlich einfacher als sich an den genauen Begriff zu erinnern, nach dem im Handbuch zu suchen, denn wenn Sie sich daran erinnern könnten, würden Sie nicht Ich muss es nachschlagen! –

6

den Befehl Ausführen

gcc -v 

wird so etwas wie diese zeigen:

COLLECT_GCC=gcc 
COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-unknown-linux-gnu/4.7.1/lto-wrapper 
Target: x86_64-unknown-linux-gnu 
Configured with: /build/src/gcc-4.7.1/configure --prefix=/usr --libdir=/usr/lib --libexecdir=/usr/lib --mandir=/usr/share/man --infodir=/usr/share/info --with-bugurl=https://bugs.archlinux.org/ --enable-languages=c,c++,ada,fortran,go,lto,objc,obj-c++ --enable-shared --enable-threads=posix --with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions --enable-clocale=gnu --disable-libstdcxx-pch --enable-libstdcxx-time --enable-gnu-unique-object --enable-linker-build-id --with-ppl --enable-cloog-backend=isl --disable-ppl-version-check --disable-cloog-version-check --enable-lto --enable-gold --enable-ld=default --enable-plugin --with-plugin-ld=ld.gold --with-linker-hash-style=gnu --enable-multilib --disable-libssp --disable-build-with-cxx --disable-build-poststage1-with-cxx --enable-checking=release 
Thread model: posix 
gcc versie 4.7.1 (GCC) 

Die Target: Linie ist das, was Sie wollen. Sie sollten in der Lage sein, daraus genügend Informationen abzuleiten.

+4

Welchen Teil von "x86_64-unknown-linux-gnu" können Sie mit "-march" verwenden? –

+0

Der erste Teil: 'x86_64'. Aber das ist ein allgemeiner. Eine vollständige Liste finden Sie im GCC-Handbuch: https://gcc.gnu.org/onlinedocs/gcc-5.1.0/gcc/x86-Options.html#x86-Options. – rubenvb

3

Ich denke, dass die Antwort ist, gibt es keine Entsprechung. Entweder Sie geben -march= nicht an und der Compiler verwendet den minimalen Befehlssatz der Architektur, oder Sie geben -march= an und es verwendet Funktionen des gewünschten CPU-Modells. Es gibt also keine Möglichkeit, eine -march= Option zu schreiben, die der Option -march entspricht.

Vielleicht, wenn Sie erklären, was die Frage motiviert hat, könnten wir diese Antwort verbessern.

8

Ich fand dieses Juwel auf dem GCC mailing list, dass die Standard -march und mtune Parameter druckt:

$ echo | gcc -v -E - 2>&1 | grep cc1 
/usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.0/cc1 -E -quiet -v - -mtune=generic -march=x86-64 

Grundsätzlich Sie eine leere Datei von stdin kompilieren und während dies zu tun, drucken Sie die Befehle.

+0

Es ist sinnvoll, darauf hinzuweisen, dass '-m32' und' -m64' im Aufruf 'gcc' verwendet werden können, um nach 32-Bit- oder 64-Bit- (Standard) -Zielen zu fragen. – 0xC0000022L

8

Sie können gcc -Q --help=<type> verwenden, um die aktuellen Optionswerte des angegebenen <type> aufzulisten. Also:

$ gcc -Q --help=target | grep march 
    -march=       x86-64 
$ gcc -m32 -Q --help=target | grep march 
    -march=       i686 
$ i686-w64-mingw32-gcc -Q --help=target | grep march 
    -march=       pentiumpro 

Edit: Eigentlich ist diese Option nicht als allgemein nützlich, wie es scheint, weil zielspezifische Vorgaben are not reflected in the output.

Verwandte Themen