2012-07-30 9 views

Odpowiedz

55

gcc -dumpmachine daje Tobie trójkę docelową, np. x86_64-unknown-linux-gnu

Jeśli gcc -v pokazuje GCC został skonfigurowany z opcją --with-arch (lub --with-arch-32 i/lub --with-arch-64) to jest to, co będzie domyślnym.

Bez opcji --with-arch (a jeśli nie jest używany niestandardowy plik specyfikacji), używany łuk będzie domyślny dla celu.

dla x86, włącznie GCC 4.4, domyślna dla 32-bitowych był -march=i386 i dla 64-bitowego była -march=x86-64 (uwaga myślnik zamiast podkreślenia.)

dla x86 z GCC 4.5 i nowszych wersjach domyślny łuk jest wywnioskowany z docelowego tripletu, tj. konfiguracja dla i586-pc-linux-gnu oznacza domyślną wartość -march=i586, konfiguracja dla core2-pc-linux-gnu oznacza domyślną wartość .

Niektóre inne platformy również określają domyślny łuk z docelowej triplety (i zrobiono to od razu przed GCC 4.4), np. ultrasparc2-sun-solaris2.10 implikuje -march=ultrasparc2.

+3

Opcje 'gcc -dumpmachine' są idealne. Kolejny przykład tego, jak dwie sekundy wyszukiwania w stackoverflow pozwala uniknąć innego odczytu strony man gcc! –

+0

Przeczytałem instrukcję i sprawiło mi to przyjemność. Miałem na myśli to, że możesz przeszukiwać stackoverflow z bardziej ludzkimi wyszukiwaniami zamiast przechodzić przez stronę man. Na przykład użyłem wcześniej 'gcc -dumpmachine', ale nie pamiętałem nazwy argumentu. Jednak czasami nie mogę wykonać łatwego wyszukiwania na stronie podręcznika dla poprawnego argumentu. Może powinienem zmienić "unikanie kolejnej lektury", aby "uniknąć kolejnego przeszukiwania";) –

+0

Ach, tak, oczywiście, to na pewno łatwiejsze niż zapamiętanie dokładnego terminu do wyszukania w instrukcji, ponieważ gdybyś mógł to zapamiętać, nie zrobiłbyś tego. T musi to sprawdzić! –

6

Uruchomienie polecenia

gcc -v 

pokaże coś takiego:

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) 

Linia Target: to, co chcesz. Powinieneś być w stanie wywnioskować z tego wystarczającą ilość informacji.

+4

Jakiej części "x86_64-unknown-linux-gnu" możesz użyć z '-march'? –

+0

Pierwsza część: 'x86_64'. Ale to jest ogólny. Pełna lista znajduje się w podręczniku GCC: https://gc.gnu.org/onlinedocs/gcc-5.1.0/gcc/x86-Options.html#x86-Options. – rubenvb

3

Myślę, że odpowiedź brzmi, że nie ma żadnego odpowiednika. Albo nie określisz -march=, a kompilator użyje minimalnego zestawu instrukcji architektury, albo podasz parametr -march= i używa funkcji dowolnego modelu procesora, o który prosisz. Tak więc nie ma możliwości napisania opcji -march=, która jest odpowiednikiem pominięcia opcji -march.

Może, jeśli wyjaśnisz, co uzasadniało pytanie, możemy poprawić tę odpowiedź.

8

Znalazłem ten klejnot na GCC mailing list że drukuje Wartość domyślna -march i mtune parametry:

$ 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 

Zasadniczo kompilujesz pusty plik ze standardowego wejścia i robiąc tak, drukowanie poleceń.

+0

Ma sens wskazać, że '-m32' i' -m64' mogą być użyte w wywołaniu 'gcc', aby zapytać o 32- lub 64-bitowe (domyślne) cele. – 0xC0000022L

8

Możesz użyć gcc -Q --help=<type>, aby wyświetlić listę bieżących wartości opcji dla danego <type>. Zatem:

$ 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 

Edycja: Faktycznie, ta opcja nie jest tak ogólnie użyteczne, ponieważ wydaje się, ponieważ docelowe specyficzne domyślnych are not reflected in the output.

Powiązane problemy