2012-07-30 140 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