Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1058840
  • 博文数量: 573
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 66
  • 用 户 组: 普通用户
  • 注册时间: 2016-06-28 16:21
文章分类

全部博文(573)

文章存档

2018年(3)

2016年(48)

2015年(522)

分类: C/C++

2015-12-09 19:03:39

    推荐用一个新建的目录来编译GCC,而不是在源码目录中,这一点玩过LFS的兄弟都很熟悉了。另外,如果先前在编译中出现了错误,推荐使用 make distclean 命令进行清理,然后重新运行 configure 脚本进行配置,再进行编译。

[注意]这里仅包含适用于 C/C++ 语言编译器、十进制数字扩展库(libdecnumber)、GOMP库(libgomp)、大杂烩的libiberty库、执行运行时边界检查的库(libmudflap)、保护堆栈溢出的库(libssp)、标准C++库(libstdc++) 相关的选项。也就是相当于 gcc-core 与 gcc-g++ 两个子包的选项。并不包括仅仅适用于 Ada Fortran Java ObjC 语言的选项。

每一个 --enable 选项都有一个对应的 --disable 选项,同样,每一个 --with 选项也都用一个对应的 --without 选项。每一对选项中必有一个是默认值(依赖平台的不同而不同)。下面所列选项若未特别说明皆为非默认值。

--cache-file=FILE
--help
--no-create
--quiet
--silent
--version
--prefix=PREFIX
--exec-prefix=EPREFIX
--bindir=DIR
--sbindir=DIR
--libexecdir=DIR
--datadir=DIR
--sysconfdir=DIR
--sharedstatedir=DIR
--localstatedir=DIR
--libdir=DIR
--includedir=DIR
--oldincludedir=DIR
--infodir=DIR
--mandir=DIR
--srcdir=DIR
--program-prefix=PREFIX
--program-suffix=SUFFIX
--program-transform-name=PROGRAM
--build=BUILD
--host=HOST
--target=TARGET 这些选项的含义基本上通用于所有软件包,这里就不特别讲解了。 --with-local-prefix=DIR 编译程序用来查找安装在本地的包含文件目录的前缀,默认为 /usr/local 。只有在系统已经建立了某些特定的目录规则,而不再是在 /usr/local/include 中查找本地安装的头文件的时候,该选项才使必须的。不能指定为 /usr ,也不能指定为包含系统标准头文件的目录,因为安装的头文件会和系统的头文件混合,从而造成冲突,导致不能编译某些程序。 --enable-languages=lang1,lang2,... 指定只安装指定的语言支持,可以使用的语言是:all(默认值,等价于"c,c++,fortran,java,objc"), ada, c, c++, fortran, java, objc, obj-c++, treelang ,若不指定该选项则安默认装所有可用的语言。 --enable-bootstrap
--disable-bootstrap 允许或禁止 bootstrap 。非交叉编译的情况下,3.4/4.0/4.1版本disable是默认值,4.2/4.3版本enable是默认值;交叉编译的情况下,disable是默认值。 --enable-checking[=LIST] 该选项会在编译器内部生成一致性检查的代码,它并不改变编译器生成的二进制结果。这样导致编译时间增加,并且仅在使用GCC作为编译器的时候才有效,但是对输出结果没有影响。对从CVS下载的版本默认值是"yes"(=assert,misc,tree,gc,rtlflag,runtime),对于正式发布的版本则是"release"(=assert,runtime),其他值还有 no和all 。可以从 "assert,df,fold,gc,gcac,misc,rtlflag,rtl,runtime,tree,valgrind,types"中选择你想要检查的项目(逗号隔开的列表),其中rtl,gcac,valgrind非常耗时。使用 --disable-checking 完全禁止这种检查会增加未能检测内部错误的风险,所以不建议这样做。 --enable-largefile 启用大文件支持 --disable-nls 禁用本地语言支持(它允许按照非英语的本地语言显示警告和错误消息)。 --disable-rpath 不硬编码运行时库的路径。 --disable-multilib 禁止编译适用于多重目标体系的库。 --enable-targets=all
--enable-targets=target_list 对于 powerpc64 和 x86_64 来说,GCC将生成复合体系结构的编译器,也就是说既可以生成64位代码,也可以生成32位代码。而在其相应的32位平台(powerpc,x86)上,则只能生成32位代码。这个选项使得在32位平台上也可以生成64位代码。当前此选项仅支持 powerpc-linux 和 x86-linux 。 --disable-cpp 不安装用户可见的 cpp 程序。 --enable-shared[=PKG[,...]]
--enable-static[=PKG[,...]] 编译共享/静态版本的库,默认值"yes"表示全部可用的库。当前可用的库名称有:libgcc, libcpp, libdecnumber, libgomp, libmudflap, libssp, libstdc++, libobjc, ada, libada, libgnat, libf2c, libgfortran, boehm-gc, fastjar, libffi, libjava, zlib 。另外,libiberty 和 libsupc++ 仅支持作为静态库。 --disable-libada 禁止编译 libada 库 --disable-libgcj 不编译 Java 的垃圾收集器 libgcj 库 --disable-libgomp 禁止编译 libgomp 库 --disable-libmudflap 不编译边界检查函数的运行时库。 --disable-libssp 不编译保护缓冲区溢出的运行时库。 --disable-libdecnumber 禁止编译 libdecnumber 库[在我的机器上总是导致GCC-4.2编译失败] --disable-libiberty 禁止编译 libiberty 库[在我的机器上总是导致GCC-4.2编译失败] --enable-decimal-float[=bid|dpd]
--disable-decimal-float 启用或禁用 libdecnumber 库的 C 语言十进制浮点扩展,还可以进一步选择浮点格式(bid是i386与x86_64的默认值|dpd是PowerPC的默认值)。在 PowerPC/i386/x86_64 GNU/Linux 系统默认启用,在其他系统上默认禁用。 --enable-install-libiberty 安装libiberty的头文件(libiberty.h),许多程序都会用到这个库中的函数(getopt,strerror,strtol,strtoul)。 --enable-linux-futex 使用 Linux 的 futex 系统调用(快速用户空间互斥体),默认自动检测,建议明确启用。 --enable-threads[=posix|aix|dce|gnat|mach|rtems|posix95|solaris|vxworks|win32|nks] 启用线程支持,这是默认值。还可以进一步指定线程模型(不同平台支持的线程模型并不相同)。 --enable-tls 指定目标系统支持TLS(线程本地存储),一般情况下不需要明确指定这个选项,因为 configure 脚本可以自动检测。仅在你认为检测不正确的情况下(比如汇编器支持 TLS 但 C 却不支持或汇编器检测错误)才使用这个选项明确指定。 --enable-symvers[=gnu|gnu-versioned-namespace|darwin|darwin-export]
--disable-symvers 启用或禁用共享库对象中符号包含的版本信息。使用这个选项将导致 ABI 发生改变。禁用版本信息可以减小库的体积,但是将不兼容依赖于老版本库的二进制程序。[提示] --disable-symvers 可能会导致 libstdc++ 的 abi_check 失败。 --with-arch=cpu 指定将来调用gcc时 -march 选项的默认值。 --with-long-double-128 指定 long double 类型为 128-bit 。基于 Glibc 2.4 或以上版本编译时默认为 128-bit ,其他情况默认为 64-bit 。 --with-gnu-as
--with-gnu-ld 指定编译器使用的为GNU汇编器/连接器,如何你实际使用的不是GNU汇编器/连接器,指定这个选项会引起混淆;另一方面如果你实际使用的是GNU汇编器/连接器,但是却没有指定这个选项,也有可能会造成混淆。 --with-as=pathname
--with-ld=pathname 指定编译器使用的汇编器/连接器的位置,必须使用绝对路径。如果configure的默认查找过程找不到汇编器/连接器,就会需要该选项。或者系统中有多个汇编器/连接器,也需要它来指定使用哪一个。如果使用GNU的汇编器,那么你必须同时使用GNU连接器。 --with-included-gettext 如果启用了NLS,该选项指出构建进程在使用系统安装的版本以前,优先使用自己的gettext副本。 --with-libiconv-prefix=DIR 使用系统中已经安装的 libiconv 库,并在 DIR/include 目录中搜索libiconv头文件,在 DIR/lib 目录中搜索libiconv库文件。 --with-libintl-prefix=DIR 使用系统中已经安装的 libintl 库,并在 DIR/include 目录中搜索 libintl 头文件,在 DIR/lib 目录中搜索 libintl 库文件。 --with-gmp[=PATH]
--with-gmp-dir=PATH
--with-gmp-include=PATH
--with-gmp-lib=PATH 指定 GMP 库的安装目录/源代码目录/头文件目录/库目录 --with-mpfr[=PATH]
--with-mpfr-dir=PATH
--with-mpfr-include=PATH
--with-mpfr-lib=PATH 指定 MPFR 库的安装目录/源代码目录/头文件目录/库目录 --with-system-libunwind 使用系统中已经安装的 libunwind 库 --with-system-zlib 使用系统中已经安装的 libz 库 --with-pic
--without-pic 试图仅使用 PIC 或 non-PIC 对象,默认两者都使用。 --with-x 使用 X Window 系统

以下选项仅适用于 C++ 语言["libstdc++-v3/docs/html/configopts.html"很值得参考]:

--enable-cstdio 使用目标平台特定的 I/O 包,等价于"--enable-cstdio=stdio"。使用这个选项将导致 ABI 接口发生改变。更多信息可以参看源码树下的"libstdc++-v3/docs/html/explanations.html#cstdio"文档。 --disable-hosted-libstdcxx 默认编译特定于主机环境的 C++ 库。使用该选项将仅编译独立于主机环境的 C++ 运行时库,这个库是默认情况的一个子集。 --enable-clocale=gnu|ieee_1003.1-2001|generic 指定目标系统的 locale 模块,默认值自动检测。建议明确设为"gnu",否则可能会编译出 ABI 不兼容的 C++ 库。 --enable-__cxa_atexit 用 __cxa_atexit 代替 atexit 来登记 C++ 对象的本地静态和全局析构函数以符合标准对析构函数的处理规定,相当于在将来调用 gcc 时默认使用 -fuse-cxa-exit 选项。它还会影响到 C++ ABI ,因此生成的 C++ 共享库在其他的 Linux 发行版上也能使用。该选项仅在使用 Glibc 的情况下有效。 --enable-cxx-flags=FLAGS 编译 libstdc++ 库文件时传递给编译器的编译标志,是一个引号界定的字符串。默认为空,表示使用环境变量 CXXFLAGS 的值。 --enable-libstdcxx-debug 额外编译调试版本的 libstdc++ 库文件,并默认安装在 ${libdir}/debug 目录中。 --enable-libstdcxx-debug-flags=FLAGS 编译调试版本的 libstdc++ 库文件时使用的编译器标志,默认为"-g3 -O0" --enable-sjlj-exceptions 强制使用旧式的 setjmp/longjmp 异常处理模型,使用这个选项将导致 ABI 接口发生改变。默认使用可以大幅降低二进制文件尺寸和内存占用的新式的 libunwind 库进行异常处理。 --enable-libstdcxx-allocator=new|malloc|mt|pool|bitmap 指定目标平台特定的底层 std::allocator ,默认自动检测。使用这个选项将导致 ABI 接口发生改变。 --enable-concept-checks 打开额外的实例化库模板编译时检查(以特定的模板形式),这可以帮助用户在他们的程序运行之前就发现这些程序在何处违反了STL规则。 --enable-fully-dynamic-string 该选项启用了一个特殊版本的 basic_string 来禁止在预处理的静态存储区域中放置空字符串的优化手段。参见 PR libstdc++/16612 获取更多细节。 --disable-long-long 禁止使用模板支持'long long'类型。'long long'是 C99 新引进的类型,也是 GNU 对 C++98 标准的一个扩展。该选项将导致 ABI 接口发生改变。 --disable-c-mbchar
--disable-wchar_t 禁止使用模板支持多字节字符类型'wchar_t'。前者用于3.4/4.0版本,后者用于4.1/4.2/4.3版本。该选项将导致 ABI 接口发生改变。 --disable-c99 禁止支持 C99 标准。该选项将导致 ABI 接口发生改变。 --enable-initfini-array 为构造函数和析构函数强制使用 .init_array 和 .fini_array (而不是 .init 和 .fini) 节。一般不需要指定该选项,因为 configure 会自动检测。 --disable-visibility 禁止 -fvisibility 编译器选项的使用(使其失效)。 --enable-cheaders=c|c_std|c_global 为 g++ 创建C语言兼容的头文件,GCC-4.3默认为"c_global",其他版本默认为"c_std"。具体含义参见源码树下的 libstdc++-v3/include/README 文件。 --disable-libstdcxx-pch 禁止创建预编译的 libstdc++ 头文件(stdc++.h.gch),这个文件包含了所有标准 C++ 的头文件。 --with-gxx-include-dir=dir G++头文件的安装目录,默认为 prefix/include/c++/版本 。

以下选项仅用于交叉编译:

--enable-serial-[{host,target,build}-]configure 强制为 host, target, build 顺序配置子包,如果使用"all"则表示所有子包。 --with-sysroot=DIR 将 dir 看作目标系统的根目录。目标系统的头文件、库文件、运行时对象都将被限定在其中。 --with-build-sysroot=sysroot 在编译时将'sysroot'当作 build 平台的根目录看待 --with-build-subdir=SUBDIR 为 build 在 SUBDIR 子目录中进行配置 --with-build-libsubdir=DIR 指定 build 平台的库文件目录 --with-build-time-tools=path 指定编译GCC自身时目标系统的工具链(汇编器,连接器,等等)目录。该目录中必须包含 ar, as, ld, nm, ranlib, strip 程序,有时还需要包含 objdump 程序。 --with-target-subdir=SUBDIR Configuring in a subdirectory for target --with-cross-host=HOST 用于为 HOST 配置交叉编译器(反对使用该选项)。 --with-headers=DIR
--with-libs=DIR 指定目标平台的头文件和库的目录。 --with-newlib 将'newlib'指定为目标系统的C库进行使用。这将导致 libgcc.a 中的 __eprintf 被忽略,因为它被假定为由'newlib'提供。如果同时指定了 with-headers 和 --with-libs 那么就隐含指定了这个选项。

以下选项意义不大,一般不用考虑它们:

--enable-stage1-checking[=all]
--enable-stage1-languages[=all] 选择在 bootstrap stage1 的过程中执行额外检查的包/语言。 --enable-dependency-tracking 启用常规的依赖性追踪(指的是Makefile规则),允许多次编译。默认禁止依赖性追踪,这样可以加速一次性编译。 --enable-maintainer-mode 启用无用的 make 规则和依赖性(它们有时会导致混淆),要求从源代码重新生成 gcc.pot 文件。该文件是主消息分类,包括编译程序产生的所有错误和警告的诊断消息,普通用户不需要了解这些信息。仅在你改动过源代码的情况下才有可能需要使用这个选项。要使该选项正常工作,需要完整的源代码树个gettext的最新版本。 --disable-fast-install 禁止为快速安装而进行优化。 --disable-libtool-lock 禁止 libtool 锁定以加快编译速度(可能会导致并行编译的失败) --enable-target-optspace 指定目标库应当应当优化尺寸而不是速度。仅在 m32r 平台上是默认值。 --enable-coverage[=opt|noopt] 在编译器每次编译时收集自身的 coverage 信息。这个仅用于内部测试的目的,并且仅在使用GCC编译的时候才有效。参数控制着是否在编译编译器时使用优化(默认为"noopt")。在需要进行 coverage 分析的时候使用"noopt",在需要进行性能分析的时候使用"opt"。 --enable-gather-detailed-mem-stats 收集详细的内存使用信息,将来在调用 gcc 时如果使用了 -fmem-report 选项就可以打印这些信息。 --enable-generated-files-in-srcdir 将生成的文件的副本保存在源代码目录中,以便于没有 texinfo, perl, bison, flex 的用户创建源代码的归档。 --enable-intermodule 仅用一步来编译 compiler ?? --enable-fixed-point
--disable-fixed-point 启用或禁用 C 定点浮点运算(fixed-point arithmetic),这是一种非常快速的模拟浮点运算的方法,特别是在没有FPU部件的处理器(比如MIPS)上。在没有硬件浮点单元的cpu上默认开启,其它默认关闭。 --enable-mapped-location location_t is fileline integer cookie (啥意思?知道的告诉我一声) --enable-secureplt 指定将来调用 gcc 时默认使用 -msecure-plt 选项,仅对 powerpc-linux 平台有效。 --enable-twoprocess 使用一个单独的过程来应用各种 fixes (啥意思?知道的告诉我一声) --enable-version-specific-runtime-libs 将运行时库安装在编译器特定的子目录 (libdir/gcc)中。另外,'libstdc++'的头文件将被安装在 libdir 中(除非指定了 --with-gxx-include-dir)。如果你打算同时安装几个不同版本的 GCC ,这个选项就很有用处了。当前,'libgomp', 'libgfortran', 'libjava', 'libmudflap', 'libstdc++', 'libobjc'都支持该选项。 --enable-werror-always
--enable-werror 前者表示全程使用 -Werror 标志编译。后者表示在 bootstrap stage2 及之后使用 -Werror 标志编译。 --with-cpp-install-dir=DIR 除了将用户可见的 cpp 程序安装到默认的 PREFIX/bin 目录外,还将安装到 prefix/DIR 目录。 --with-slibdir=DIR 共享库的安装目录,默认等于 --libdir 的值。 --with-datarootdir=DIR 将 DIR 用作数据根目录,默认值是[PREFIX/share] --with-docdir=DIR
--with-htmldir=DIR
--with-pdfdir=DIR 指定各种特定格式的文档的安装目录。 --with-stabs 指定编译程序产生的调试信息为stabs格式,而不是宿主系统的默认格式。通常GCC产生的默认调试信息是ECOFF格式,但是它包含的调试信息没有stabs多。 --with-dwarf2 指定编译程序产生的调试信息默认为DWARF2格式。 --with-gc[=simple|page|zone] 指定编译过程中使用的垃圾回收方案(默认为"page")。 --with-demangler-in-ld 尝试在 GNU ld 中使用 demangler (啥意思?) --with-debug-prefix-map='A=B C=D ...' map A to B, C to D ... in debug information --x-includes=DIR
--x-libraries=DIR 指定 X 的头文件和库的所在目录
阅读(3967) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~