天天看点

configure选项

1、

configure --prefix=/tools --disable-nls

--prefix=/tools

这个参数告诉 configure 脚本,应该把 Binutils 软件包中的程序安装到 /tools 目录中。

--disable-nls

这个参数禁止了国际化(通常简称i18n),静态程序不需要国际化的特性。

2、

configure --prefix=/tools \

    --with-local-prefix=/tools --disable-nls --enable-shared \

    --enable-languages=c

--with-local-prefix=/tools

这个参数的目的是把 /usr/local/include 目录从 gcc 的 include 搜索路径里删除。这并不是绝对必要,但我们想尽量减小宿主系统的影响,所以才这样做。

--enable-shared

这个参数咋一看有点违反直觉。但只有加上它,才能编译出 libgcc_s.so.1 和 libgcc_eh.a 。Glibc(下一个软件包)的配置脚本只有在找到 libgcc_eh.a 时才能确保产生正确的结果。

--enable-languages=c

只编译 GCC 软件包中的 C 编译器。我们在本章里不需要其它编译器。

3、

configure --prefix=/tools \

    --disable-profile --enable-add-ons \

    --enable-kernel=2.6.0 --with-binutils=/tools/bin \

    --without-gd --with-headers=/tools/include \

    --without-selinux

--disable-profile

它关掉了 profiling 信息相关的库文件编译。如果你打算做 profiling ,就省掉这个参数。

--enable-add-ons

这个指示 Glibc 使用附加的 NPTL 包作为线程库。

--enable-kernel=2.6.0

这个告诉 Glibc 编译支持 2.6.x 内核的库。

--with-binutils=/tools/bin

这个参数并不是必需的。但它们能保证在编译 Glibc 时不会用错 Binutils 程序。

--without-gd

这个参数保证不生成 memusagestat 程序,这个程序会顽固地连接到宿主系统的库文件(libgd, libpng, libz 等等)。

--with-headers=/tools/include

这个参数指示 Glibc 按照前面刚刚安装到 tools 目录中的内核头文件编译自己,从而精确的知道内核的特性以根据这些特性对自己进行最佳化编译。

--without-selinux

当从一个含有 SELinux 特性的宿主系统(如 Fedora Core 3)编译时,Glibc 将会将 SELinux 支持编译进来。由于 LFS 工具链并不包含 SELinux 支持,所以一个含有 SELinux 特性的 Glibc 将会导致许多操作失败。所以这里明确禁用它。

4、

./configure --prefix=/tools --with-tcl=/tools/lib \

  --with-tclinclude=/tools/include --with-x=no

--with-tcl=/tools/lib

这个选项确保配置脚本找到的是安装在临时工具目录下的 Tcl ,而不是宿主系统里的。

--with-tclinclude=/tools/include

这个选项告诉 Expect 到哪里寻找 Tcl 的源代码目录和头文件。使用这个选项可以避免 configure 脚本因为找不到 Tcl 的源代码目录而导致的失败。

--with-x=no

这个选项告诉 configure 脚本不要搜索 Tk(Tcl的图形界面组件)或者 X Window 系统的库,这两者都可能位于宿主系统上。

5、

configure --prefix=/tools \

    --with-local-prefix=/tools --enable-clocale=gnu \

    --enable-shared --enable-threads=posix \

    --enable-__cxa_atexit --enable-languages=c,c++ \

    --disable-libstdcxx-pch

--enable-clocale=gnu

本参数确保 C++ 库在任何情况下都使用正确的 locale 模块。如果配置脚本查找到 de_DE 这个 locale ,它就会使用正确的 gnu locale 模块。然而,如果没有安装 de_DE ,就有可能创建出应用程序二进制接口(ABI)不兼容的 C++ 库文件,这是因为选择了错误的通用(generic) locale 模块。

--enable-threads=posix

使 C++ 异常能处理多线程代码。

--enable-__cxa_atexit

用 __cxa_atexit 代替 atexit 来登记 C++ 对象的本地静态和全局析构函数,这是为了完全符合标准对析构函数的处理规定。它还会影响到 C++ ABI ,因此生成的 C++ 共享库在其他的 Linux 发行版上也能使用。

--enable-languages=c,c++

本参数编译 C 和 C++ 语言的编译器。

--disable-libstdcxx-pch

不为 libstdc++ 编译预编译头(PCH),它占用了很大空间,但是我们用不到它。

6、

configure --prefix=/tools \

    --disable-nls --with-lib-path=/tools/lib

--with-lib-path=/tools/lib

这个选项指示 configure 脚本在 Binutils 编译过程中将传递给连接器的库搜索路径设为 /tools/lib ,以防止连接器搜索宿主系统的库目录。

7、

./configure --prefix=/tools --with-shared \

    --without-debug --without-ada --enable-overwrite

--without-ada

这个选项让 Ncurses 在即使宿主系统上安装了 Ada 编译器的情况下也不要编译其 Ada 绑定。需要这样做的原因是一旦我们进入 chroot 环境,Ada 就不能使用了。

--enable-overwrite

这个选项让 Ncurses 把它的头文件安装到 /tools/include 目录,而不是 /tools/include/ncurses 目录,以确保其它软件包可以顺利找到 Ncurses 的头文件。

8、

./configure --prefix=/tools --without-bash-malloc

--without-bash-malloc

这个选项禁用了 Bash 的内存分配函数(malloc),这个函数已知会造成段错误,通过设置这个选项,Bash 将使用更为稳定的 Glibc 里的 malloc 函数。

9、

./configure --prefix=/tools --disable-shared

--disable-shared

当前我们不需要安装任何 Gettext 共享库,因此也就不需要编译它们。

10、

./configure --prefix=/tools \

    --disable-perl-regexp

--disable-perl-regexp

这个选项确保 grep 程序不连接可能在宿主系统上存在的 PCRE(Perl 兼容正则表达式)库,因为进入 chroot 环境后,它就不能使用了。

11、

./configure.gnu --prefix=/tools -Dstatic_ext='Data/Dumper Fcntl IO POSIX'

-Dstatic_ext='Data/Dumper Fcntl IO POSIX'

这个选项让 Perl 编译静态扩展的最小集,下一章安装和测试 Coreutils 软件包的时候需要用到。

12、

configure --prefix=/usr \

    --disable-profile --enable-add-ons \

    --enable-kernel=2.6.0 --libexecdir=/usr/lib/glibc

--libexecdir=/usr/lib/glibc

把pt_chown程序的位置从默认的 /usr/libexec 改为 /usr/lib/glibc 。

13、

configure --prefix=/usr --enable-compat185 --enable-cxx

--enable-compat185

这个选项指定编译 Berkeley DB 1.85 向上兼容性API。

--enable-cxx

这个选项指定编译 C++ API 库。

14、

./configure --prefix=/usr --with-shared --without-debug --enable-widec

--enable-widec

这个选项导致宽字符库(例如,libncursesw.so.5.5)将会替换正常的(例如,libncurses.so.5.5)。这些宽字符库可以在 多字节和传统的8位 locale 下使用,然而正常的库一般只能在 8位 的locale环境下工作。宽字符和正常的库是源码兼容的,但不是二进制兼容的。

15、

./configure --prefix=/usr --bindir=/bin --enable-html

--enable-html

This builds the HTML documentation.

16、 

对 Perl 的设置进行更多的控制,你可以运行交互的 Configure 脚本,精心选择编译配置。如果你能接受 Perl 的自动配置(这是很明智的),就用下面的命令:

./configure.gnu --prefix=/usr \

    -Dman1dir=/usr/share/man/man1 \

    -Dman3dir=/usr/share/man/man3 \

    -Dpager="/usr/bin/less -isR"

-Dpager="/usr/bin/less -isR"

纠正 perldoc 代码调用 less 程序时的一个错误。

-Dman1dir=/usr/share/man/man1 -Dman3dir=/usr/share/man/man3

因为 Groff 还没有安装,Configure 会认为我们不想安装 Perl 的 man 手册。应用这个参数来改变这种情况:

17、

./configure --prefix=/usr --bindir=/bin \

    --without-bash-malloc --with-installed-readline

--with-installed-readline

这个选项是告诉 Bash 使用已经安装的系统的 readline 库,而不是它自己的 readline 版本。

18、

../configure --prefix=/usr --with-root-prefix="" \

    --enable-elf-shlibs --disable-evms

--with-root-prefix=""

有的程序(如 e2fsck )对系统来说是非常重要的,例如,在 /usr 没有挂载的情况下。这些程序和库就应放在像 /lib 和 /sbin 这些目录中。如果没有把上面的参数传递给 E2fsprogs 的 configure 脚本,它就会把程序放在 /usr 目录下。

--enable-elf-shlibs

这会创建共享的库,供 E2fsprogs 包中的一些程序使用。

--disable-evms

这个选项禁止了企业卷管理系统(EVMS)插件的支持。因为这个插件并没有更新到适合最新的 EVMS 接口并且 EVMS 并不是基本 LFS 系统的一部分,所以我们并不需要这个插件。

19、

./configure --prefix=/usr --libexecdir=/usr/lib/findutils \

    --localstatedir=/var/lib/locate

--localstatedir

将 locate 数据库的位置指定为 /var/lib/locate ,以符合 FHS 标准。

20、

./configure --prefix=/usr --libexecdir=/usr/sbin \

    --sysconfdir=/etc --localstatedir=/var \

    --disable-logger --disable-syslogd \

    --disable-whois --disable-servers

--disable-logger

阻止 inetutils 安装 logger 程序,脚本利用这个程序向系统日志守护进程传递消息。我们不安装它是因为 Util-linux 包含一个更好的版本。

--disable-syslogd

这个参数阻止 inetutils 安装 System Log Daemon(系统日志守护进程),我们将在后面的 Sysklogd 软件包中安装它。

--disable-whois

阻止 inetutils 编译 whois 客户端,因为它已经很陈旧了。在 BLFS book 里面有安装更好的 whois 客户端的指导。

--disable-servers

阻止安装几种网络服务器。这些服务器对于基本的 LFS 系统是不合适的,有的还不安全,很多服务器都有更好的替代者。

21、

./configure --datadir=/lib/kbd

--datadir=/lib/kbd

这个选项把键盘布局信息存放到根分区内,而不是存放在默认的 /usr/share/kbd。

22、

./configure --prefix=/usr --sysconfdir=/etc

--sysconfdir=/etc

这个选项告诉程序建立软件包时在 /etc 目录里查找配制文件。

23、

./configure --prefix=/usr --enable-mb-groff --disable-setuid

--enable-mb-groff

通知 man 在格式化非ISO-8859-1格式的 manual 页时,使用 "ascii8" 和 "nippon" Groff 设备。

--disable-setuid

使 man 不能给用户 man 设置uid位。

24、

./configure --prefix=/usr --with-libc

--with-libc

这个使得 mktemp 程序从系统的 C 库中使用 mkstemp 和 mkdtemp 的功能。

25、

./configure --prefix=/usr --exec-prefix=""

--exec-prefix=""

这个确保 Psmisc 二进制文件按照 FHS 标准被安装在 /bin 而不是 /usr/bin ,因为一些 Psmisc 二进制文件将被 LFS-Bootscripts 使用。

26、

./configure --libdir=/lib --enable-shared --without-selinux

--without-selinux

selinux 的支持默认是打开的,但是 selinux 不包含在 LFS 基本系统中。如果这个选项不设置, configure 脚本会报错。

27、

./configure --prefix=/usr --enable-multibyte

--enable-multibyte

我们强烈推荐你启用该选项(虽然它是可选的),因为它使得 Vim 可以支持使用多字节字符编码的文件,在一个使用多字节字符集的 locale 上,这是必需的。另外该选项还有助于编辑在默认使用 UTF-8 字符集的其它 Linux 发行版(如 Fedora Core)上创建的文本文件。

28、