2012-07-30 141 views

回答

55

gcc -dumpmachine爲您提供目標三元組,例如x86_64-unknown-linux-gnu

如果gcc -v顯示GCC用--with-arch選項配置(或--with-arch-32和/或--with-arch-64),那麼這會是怎樣的默認值。

沒有--with-arch選項(如果沒有使用自定義規格文件),那麼使用的拱將是目標的默認值。

對於x86,直至幷包括GCC 4.4,對於32位的缺省是-march=i386和64位爲-march=x86-64(注意連字符代替下劃線。)

對於x86與GCC 4.5和更高版本從目標三元組推斷默認拱,即配置爲i586-pc-linux-gnu表示默認值爲-march=i586,配置爲core2-pc-linux-gnu表示默認值爲-march=core2

一些其他平臺還可以從目標三元組中推斷出默認的拱形(從GCC 4.4開始就已經完成),例如, ultrasparc2-sun-solaris2.10意味着-march=ultrasparc2

+3

'gcc -dumpmachine'選項非常完美。另一個關於如何在stackoverflow上進行兩秒搜索的例子可以避免再次讀取gcc手冊頁! – 2013-02-07 11:14:34

+0

我已閱讀手冊,並享受它。我的意思是,你可以用更多的人類搜索術語搜索stackoverflow而不是通過手冊頁。例如,我之前使用過'gcc -dumpmachine',但不記得參數名稱。不過,我無法在man頁面中輕鬆搜索正確的參數。也許我應該改變「避免另一次閱讀」,「避免再次搜索」;) – 2013-02-07 17:33:21

+0

啊,是的,夠公平的,這確實比記住手冊中搜索的確切術語容易,因爲如果你能記住它,不需要查看它! – 2013-02-07 18:16:13

6

運行命令

gcc -v 

會顯示這樣的事情:

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) 

Target:行是你想要的。你應該能夠從中推斷出足夠的信息。

+4

「-march」可以使用「x86_64-unknown-linux-gnu」的哪部分內容? – 2012-07-30 23:15:50

+0

第一部分:'x86_64'。但這是一個普遍的問題。完整列表可以在GCC手冊中找到:https://gcc.gnu.org/onlinedocs/gcc-5.1.0/gcc/x86-Options.html#x86-Options。 – rubenvb 2015-06-21 15:20:22

3

我認爲答案是沒有任何等價的。要麼你沒有指定-march=,並且編譯器使用該體系結構的最小指令集,或者指定了-march=,並且它使用您要求的任何cpu模型的功能。所以沒有辦法編寫一個-march=選項,相當於省略了-march選項。

也許,如果你解釋了什麼動機的問題,我們可以改善這個答案。

8

我發現,打印默認-marchmtune參數GCC mailing list這個寶石:

$ 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 

基本上,你正在編譯從標準輸入一個空白文件,而這樣做,你打印的命令。

+0

有意義的是指出''m32'和'-m64'可用於'gcc'調用以請求32位或64位(默認)目標。 – 0xC0000022L 2017-08-09 12:57:07

8

您可以使用gcc -Q --help=<type>列出給定<type>的當前選項值。因此:

$ 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 

編輯:其實,這個選項並不像看起來那麼通常是有用的,因爲具體的目標默認are not reflected in the output