部分是基于官方的GCC安装指南的简要描述,如果你想了解更详细的信息请参考官方文档。
推荐用一个新建的目录来编译GCC,而不是在源码目录中,这一点玩过LFS的兄弟都很熟悉了。另外,如果先前在编译中出现了错误,推荐使用 make distclean 命令进行清理,然后重新运行 configure 脚本进行配置,再进行编译。
下面将简要介绍所有可用的配置选项。需要注意的是,不能使用"configure --help"查看GCC的配置选项,只能通过页面查看。
每一个 --enable 选项都有一个对应的 --disable 选项,同样,每一个 --with 选项也都用一个对应的 --without 选项。每一对选项中必有一个是默认值(依赖平台的不同而不同)。下面所列选项若未特别说明皆为非默认值。
--prefix
--exec-prefix
--bindir
--libdir
--libexecdir
--infodir
--datadir
--mandir
--program-prefix
--program-suffix
--program-transform-name
--host
--build
--target
--srcdir
--cache-file
--no-create
--silent
--version
这些选项的含义基本上通用于所有软件包,这里就不特别讲解了。
--tmpdir=dir
指定用来保存临时工作文件的目录。
--with-slibdir=dir
共享库 libgcc 的安装目录,默认等于 --libdir 的值。
--with-gxx-include-dir=dir
G++头文件的安装目录,默认为 prefix/include/c++/版本 。
--with-local-prefix=dir
编译程序用来查找安装在本地的包含文件目录的前缀,默认为 /usr/local 。只有在系统已经建立了某些特定的目录规则,而不再是在
/usr/local/include 中查找本地安装的头文件的时候,该选项才使必须的。不能指定为 /usr
,也不能指定为包含系统标准头文件的目录,因为安装的头文件会和系统的头文件混合,从而造成冲突,导致不能编译某些程序。
--enable-shared[=package[,...]]
在支持共享库的平台上编译共享版本的库,这是默认值。如果指定了库名称的列表则列表之外的库将编译为静态版本。当前可用的库名称有:'libgcc',
'libstdc++', 'libffi', 'zlib', 'boehm-gc', 'ada', 'libada', 'libjava',
'libobjc'。另外,'libiberty'不支持作为共享库。可以用 --disable-shared 指定仅仅编译静态库。
--with-gnu-as
--with-gnu-ld
指定编译器使用的汇编器为GNU汇编器/连接器,如何你实际使用的不是GNU汇编器/连接器,指定这个选项会引起混淆;另一方面如果你实际使用的是GNU汇编器/连接器,但是却没有指定这个选项,也有可能会造成混淆。
--with-as=pathname
--with-ld=pathname
指定编译器使用的汇编器/连接器的位置。如果configure的默认查找过程找不到汇编器/连接器,就会需要该选项。或者系统中有多个汇编器/连接器,也需要它来指定使用哪一个。如果使用GNU的汇编器,那么你就必须同时使用GNU连接器。
--with-stabs
指定编译程序产生的调试信息为stabs格式,而不是宿主系统的默认格式。通常GCC产生的默认调试信息是ECOFF格式,但是它包含的调试信息没有stabs多。
--disable-multilib
禁止编译适用于多重目标体系的库。
--enable-threads[=posix|aix|dce|gnat|mach|rtems|posix95|solaris|vxworks|win32|nks]
启用线程支持,这是默认值。还可以进一步指定线程模型(不同平台支持的线程模型并不相同)。它对Obj-C的编译器和库以及C++,Java的异常处理有影响。
--enable-tls
指定目标系统支持TLS(线程本地存储),一般情况下不需要明确指定这个选项,因为 configure 脚本可以自动检测。仅在你认为检测不正确的情况下才使用这个选项明确指定。
--with-cpu=cpu
指定将来调用 gcc 时 -mcpu 选项的默认值。
--with-schedule=cpu
指定将来调用 gcc 时 -mschedule 选项的默认值。
--with-arch=cpu
指定将来调用 gcc 时 -march 选项的默认值。
--with-tune=cpu
指定将来调用 gcc 时 -mtune 选项的默认值。
--with-abi=abi
指定将来调用 gcc 时 -mabi 选项的默认值。
--with-fpu=type
指定将来调用 gcc 时 -mfpu 选项的默认值。
--with-float=type
指定将来调用 gcc 时 -mhard-float 或 -msoft-float 选项的默认值。
--with-mode=mode
指定将来调用 gcc 时 -marm 或 -mthumb 选项的默认值。此选项仅支持 ARM 平台。
--with-divide=traps|breaks
指定编译器如何处理除数为零的情况。此选项仅支持 MIPS 平台。
--enable-__cxa_atexit
用 __cxa_atexit 代替 atexit 来登记 C++ 对象的本地静态和全局析构函数以符合标准对析构函数的处理规定,相当于在将来调用
gcc 时默认使用 -fuse-cxa-exit 选项。它还会影响到 C++ ABI ,因此生成的 C++ 共享库在其他的 Linux
发行版上也能使用。该选项仅在使用 Glibc 的情况下有效。
--enable-target-optspace
指定目标库应当应当优化尺寸而不是速度。仅在 m32r 平台上是默认值。
--disable-cpp
禁止安装 cpp[C预处理程序]。
--with-cpp-install-dir=dirname
指定 cpp 程序的安装目录为 prefix/dirname
--enable-initfini-array
为构造函数和析构函数强制使用 .init_array 和 .fini_array (而不是 .init 和 .fini) 节。一般不需要指定该选项,因为 configure 会自动检测。
--enable-maintainer-mode
要求从源代码重新生成 gcc.pot
文件。该文件是主消息分类,包括编译程序产生的所有错误和警告的诊断消息,普通用户不需要了解这些信息。仅在你改动过源代码的情况下才有可能需要使用这个
选项。要使该选项正常工作,需要完整的源代码树个gettext的最新版本。
--disable-bootstrap
--enable-bootstrap
是否允许 bootstrap 。非交叉编译的情况下,enable是默认值;交叉编译的情况下,disable是默认值,但是你可以强制指定。
--enable-version-specific-runtime-libs
将运行时库安装在编译器特定的子目录 (libdir/gcc)中。另外,'libstdc++'的包含文件将被安装在 libdir 中(除非指定了
--with-gxx-include-dir)。如果你打算同时安装几个不同版本的 GCC
,这个选项就很有用处了。当前,'libgfortran', 'libjava', 'libmudflap', 'libstdc++',
'libobjc'都支持该选项。
--enable-languages=lang1,lang2,...
指定只安装指定的语言支持,可以使用的语言是:ada, c, c++, fortran, java, objc, obj-c++, treelang,若不指定该选项则安默认装所有可用的语言支持。
--disable-libada
不编译 GNAT 使用的运行时库和工具(Ada相关)。
--disable-libssp
不编译保护缓冲区溢出的运行时库。
--disable-libmudflap
不编译边界检查函数的运行时库。
--disable-libgomp
不编译 GOMP 使用的运行时库和工具。
--with-dwarf2
指定编译程序产生的调试信息默认为DWARF2格式。
--enable-targets=all
--enable-targets=target_list
在一些混合型的目标平台上(比如
x86_64-linux)会创建混合型的编译器(既能够生成64位代码也能生成32位代码)。但是如果在此指定"x86-linux"将只能生成32位
代码。通常当你希望在x86_64机器上默认生成32位代码的时候才使用该选项。
--enable-secureplt
指定将来调用 gcc 时默认使用 -msecure-plt 选项,仅对 powerpc-linux 平台有效。
--nfp
指定机器没有浮点运算单元,仅在 m68k-sun-sunosn 平台上有效。
--disable-werror
禁止在编译时显示错误信息。
--enable-checking=list
该选项会产生执行编译程序内部检查的代码。这种检查会产生诊断输出并会增加编译时间,并且仅在使用GCC作为编译器的时候才有效,但是对输出结果没有影
响。对从CVS下载的版本默认值是"yes"(=assert,misc,
tree,gc,rtlflag,runtime),对于正式发布的版本则是"release"(=assert,runtime)。可以从
"assert,fold,gc,misc,rtlflag,runtime,tree,gcac,rtl"中选择你想要检查的项目(逗号隔开的列表),
需要注意的是最后两项检查非常耗时。使用 --disable-checking 完全禁止这种检查会增加未能检测内部错误的风险。
--enable-coverage[=opt|noopt]
在编译器每次编译时收集自身的 coverage
信息。这个仅用于内部测试的目的,并且仅在使用GCC编译的时候才有效。参数控制着是否在编译编译器时使用优化(默认为"noopt")。在需要进行
coverage 分析的时候使用"noopt",在需要进行性能分析的时候使用"opt"。
--enable-gather-detailed-mem-stats
收集详细的内存使用信息,将来在调用 gcc 时如果使用了 -fmem-report 选项就可以打印这些信息。
--with-gc[=page|zone]
指定编译过程中使用的垃圾回收方案(默认为"page")。
--disable-nls
禁用本地语言支持(它允许按照非英语的本地语言显示警告和错误消息)。
--with-included-gettext
如果启用了NLS,该选项指出构建进程在使用系统安装的版本以前,优先使用自己的gettext副本。
--with-catgets
如果启用了NLS,同时主机又没有安装settext(但有较低级的catgets接口),默认GCC的编译进程会使用其自带的gettext库。但是该选项将会强制编译进程使用主机的catgets。
--with-libiconv-prefix=dir
在 dir/include 目录中搜索libiconv头文件,在 dir/lib 目录中搜索libiconv库文件。
--enable-obsolete
允许为废弃的系统进行配置。被标记为"废弃的"系统将不会在下一个主要的版本中支持。
--enable-decimal-float
--disable-decimal-float
启用(或禁用)C十进制浮点扩展。在 PowerPC GNU/Linux 系统默认启用,在其他系统上默认禁用。
--with-long-double-128
指定 long double 类型为 128-bit 。基于 Glibc 2.4 或以上版本编译时默认为 128-bit ,其他情况默认为 64-bit 。
--with-gmp=pathname
--with-mpfr=pathname
如果你没有将GMP(GNU Multiple Precision)库和MPFR库安装在标准位置,你可以使用这些选项指定他们的位置。
以下选项仅用于交叉编译环境
--with-sysroot=dir
将 dir 看作目标系统的根目录。目标系统的头文件、库文件、运行时对象都将被限定在其中。
--with-newlib
将'newlib'指定为目标系统的C库进行使用。这将导致 libgcc.a 中的 __eprintf 被忽略,因为它被假定为由'newlib'提供。
--with-build-time-tools=dir
指定编译GCC自身时目标系统的工具链(汇编器,连接器,等等)目录。该目录中必须包含 ar, as, ld, nm, ranlib, strip 程序,有时还需要包含 objdump 程序。
阅读(1436) | 评论(0) | 转发(0) |