源码安装最怕的就是配置前忘记添加参数,一配置编译错误,就得从头再来。仅以此篇献给一样在奋斗着的午饭们。

./configure [OPTION]... [VAR=VALUE]...

若要指定环境变量(比如:CCCFLAGS ...),请使用 VAR=VALUE 的格式。有一些有用的环境变量说明。

下列选项会影响configure脚本自身的行为。方括号"[]"内是默认值。

-C --config-cache
等价于  --cache-file=config.cache
--cache-file=FILE
FILE文件中缓存测试结果(默认禁用)。 
-h --help[=short|recursive]
显示帮助信息然后退出。使用 short参数将只显示正在运行的当前脚本的选项,而不能列出适用于Apache配置脚本所运行的外部配置脚本的选项。使用 recursive参数将显示所有程序包的简短描述。 
-n --no-create
configure脚本运行结束后不输出结果文件,常用于正式编译前的测试。 
-q --quiet
不显示脚本工作期间输出的" checking ..."消息。 
--srcdir=DIR
指定源代码所在目录 DIR 。[configure脚本所在目录或父目录] 
--silent
等价于  --quiet
-V  --version 
显示版权信息后退出。 

--prefix=PREFIX
体系无关文件的顶级安装目录 PREFIX ,也就Apache的安装目录。[ /usr/local/apache2
--exec-prefix=EPREFIX
体系相关文件的顶级安装目录 EPREFIX ,把体系相关的文件安装到不同的位置可以方便地在不同主机之间共享体系相关的文件。[ PREFIX
--enable-layout=LAYOUT
使用名为 LAYOUT的布局配置所有源代码和编译脚本。这样就允许你在安装Apache时分别指定不同文件的安装位置。 文件中包含了默认布局的示例,你可以根据它创建你自己的布局。这个文件中的不同布局使用 <Layout FOO>...</Layout>段进行分组,其中的 FOO就是布局名。默认的布局是 Apache 。 
--bindir=DIR
用户可执行目录 DIR 。用于存放对网站管理员很有帮助的 之类的支持程序。
[ EPREFIX/bin
--datadir=DIR
Web服务器只读的体系无关数据目录 DIR 。虽然 autoconf提供了该选项,但Apache并未使用它。
[ PREFIX/share
--includedir=DIR
Apache的C头文件目录 DIR 。
[ EPREFIX/include
--infodir=DIR
信息文档目录 DIR 。虽然 autoconf提供了该选项,但Apache并未使用它。
[ PREFIX/info
--libdir=DIR
对象代码库目录 DIR 。
[ EPREFIX/lib
--libexecdir=DIR
程序可执行目录 DIR ,也就是动态加载模块目录。
[ EPREFIX/libexec
--localstatedir=DIR
可写的单一机器数据目录 DIR 。虽然 autoconf提供了该选项,但Apache并未使用它。
[ PREFIX/var
--mandir=DIR
手册文档目录 DIR 。
[ EPREFIX/man
--oldincludedir=DIR
非gcc的C头文件目录 DIR 。虽然 autoconf提供了该选项,但Apache并未使用它。
[ /usr/include
--sbindir=DIR
系统管理员可执行目录 DIR ,用于存放运行HTTP服务器所必须的 之类的服务程序。
[ EPREFIX/sbin
--sharedstatedir=DIR
可写的体系无关数据目录 DIR 。虽然 autoconf提供了该选项,但Apache并未使用它。
[ PREFIX/com
--sysconfdir=DIR
只读的单一机器数据目录 DIR ,用于存放 httpd.confmime.types之类的服务器配置文件。
[ PREFIX/etc

这些选项用于交叉编译在其他平台上运行的Apache HTTP服务器。在同一平台上编译和运行Apache HTTP服务器通常不需要使用这些选项,脚本会自动检测并设置。方括号"[]"内是默认值。

--build=BUILD
指定编译工具所在系统的系统类型 BUILD 。
[ config.guess脚本的检测结果] 
--host=HOST
指定Apache HTTP服务器将要运行的目标系统类型 HOST 。
[ BUILD
--target=TARGET
configure for building compilers for  TARGET类型的系统。虽然 autoconf提供了该选项,但Apache并未使用它。
[ HOST

有两种使用模块的方法:一是静态连接进核心,二是作为DSO模块动态加载;如果编译中包含任何DSO模块,则mod_so会被自动包含进核心。如果希望核心能够装载DSO,但不实际编译任何DSO模块,则需明确指定"--enable-so=static"。

一般情况下你可以使用如下语法启用或者禁用某个模块:

--disable-MODULE
禁用 MODULE模块(仅用于基本模块) 
--enable-MODULE=shared
MODULE编译为DSO(可用于所有模块) 
--enable-MODULE=static
MODULE静态连接进核心(仅用于扩展和实验模块) 
--enable-mods-shared=MODULE-LIST
MODULE-LIST中的所有模块都编译成DSO(可用于所有模块) 
--enable-modules=MODULE-LIST
MODULE-LIST静态连接进核心(可用于所有模块)

 

上述 MODULE-LIST 可以是:
(1)用引号界定并且用空格分隔的模块名列表

--enable-mods-shared='headers rewrite dav' 

(2)"most"(大多数模块[遇见错误模块时忽略该模块而不中断配置过程])
(3)"all"(所有模块[遇见错误模块时中断配置过程并报错])

--enable-mods-shared=most 

注意

configure将忽略 MODULEMODULE-LIST中的拼写错误,注意仔细拼写。用于 MODULEMODULE-LIST中的名称是" mod_NAME"中去掉" mod_"并将剩余部分中的下划线" _"替换为连字符" -"以后的结果,比如" mod_log_config"模块应当表示为" log-config"。

基本(B)模块默认包含,必须明确禁用;扩展(E)/实验(X)模块默认不包含,必须明确启用。

模块名称状态简要描述
(B)根据特定的媒体类型或请求方法,激活特定的CGI脚本
(B)提供从文件系统的不同部分到文档树的映射和URL重定向
(B)发送自己包含HTTP头内容的文件
(B)使用基本认证
(B)在未正确配置认证模块的情况下简单拒绝一切认证信息
(B)使用纯文本文件为认证提供支持
(B)在未正确配置授权支持模块的情况下简单拒绝一切授权请求
(B)使用纯文本文件为组提供授权支持
(B)供基于主机名、IP地址、请求特征的访问控制
(B)基于每个用户提供授权支持
(B)自动对目录中的内容生成列表,类似于"ls"或"dir"命令
(B)在非线程型MPM()上提供对CGI脚本执行的支持
(B)在线程型MPM()上用一个外部CGI守护进程执行CGI脚本
(B)指定目录索引文件以及为目录提供"尾斜杠"重定向
(B)允许Apache修改或清除传送到CGI脚本和SSI页面的环境变量
(B)根据上下文实际情况对输出过滤器进行动态配置
(B)处理服务器端图像映射
(B)实现服务端包含文档(SSI)处理
(B)仅限于在Windows平台上实现ISAPI扩展
(B)允许记录日志和定制日志文件格式
(B)根据文件扩展名决定应答的行为(处理器/过滤器)和内容(MIME类型/语言/字符集/编码)
(B)提供支持
(B)仅限于在NetWare平台上实现SSL加密支持
(B)根据客户端请求头字段设置环境变量
(B)生成描述服务器状态的Web页面
(B)允许用户从自己的主目录中提供页面(使用"/~username")
(X)使用MD5摘要认证(更安全,但是只有最新的浏览器才支持)
(E)基于实际认证支持者创建扩展的认证支持者,并为它起一个别名以便于引用
(E)提供匿名用户认证支持
(E)使用SQL数据库为认证提供支持
(E)使用DBM数据库为认证提供支持
(E)允许使用一个LDAP目录存储用户名和密码数据库来执行基本认证和授权
(E)使用DBM数据库文件为组提供授权支持
(E)基于文件的所有者进行授权
(E)基于URI键的内容动态缓冲(内存或磁盘)
(E)允许Apache使用CERN httpd元文件,从而可以在发送文件时对头进行修改
(X)允许对页面进行字符集转换
(E)允许Apache提供协议支持
(E)访问服务器上的文件系统提供支持
(E)锁定服务器上的文件提供支持
(E)管理SQL数据库连接,为需要数据库功能的模块提供支持
(E)压缩发送给客户端的内容
(E)基于磁盘的缓冲管理器
(E)将所有I/O操作转储到错误日志中
(X)一个很简单的协议演示模块
(X)一个很简单的Apache模块API演示模块
(E)允许通过配置文件控制HTTP的"Expires:"和"Cache-Control:"头内容
(E)使用外部程序作为过滤器
(X)提供文件描述符缓存支持,从而提高Apache性能
(E)允许通过配置文件控制任意的HTTP请求和应答头信息
(E)实现RFC1413规定的ident查找
(E)生成Apache配置情况的Web页面
(E)为其它LDAP模块提供LDAP连接池和结果缓冲服务
(E)实现"对比日志",即在请求被处理之前和处理完成之后进行两次记录
(E)对每个请求的输入/输出字节数以及HTTP头进行日志记录
(E)基于内存的缓冲管理器
(E)通过读取部分文件内容自动猜测文件的MIME类型
(E)提供HTTP/1.1的代理/网关功能支持
(E)的扩展,提供Apache JServ Protocol支持
(E)的扩展,提供负载平衡支持
(E)的扩展,提供对处理HTTP CONNECT方法的支持
(E)的FTP支持模块
(E)的HTTP支持模块
(E)一个基于一定规则的实时重写URL请求的引擎
(E)允许运行时加载DSO模块
(E)自动纠正URL中的拼写错误
(E)使用安全套接字层(SSL)和传输层安全(TLS)协议实现高强度加密传输
(E)
(E)为每个请求生成唯一的标识以便跟踪
(E)使用Session跟踪用户(会发送很多Cookie),以记录用户的点击流
(E)提供基于版本的配置段支持
(E)提供大批量虚拟主机的动态配置支持

必须有而且只能有一个被静态包含进核心,你可以使用下面的配置选项进行选择:

--with-mpm=MPM
其中, MPM是你想要使用的多路处理模块的名字。如果你不使用这个选项,那么将会使用对应于各平台的 ,可选的MPM如下:

有至少两种方法可以添加第三方模块,最简单的方法是作为配置参数提供,语法如下:

--with-module=module-type:module-file[, module-type:module-file]

 

所以一般并不使用此方法,而是使用(Apache扩展工具)来添加第三方模块支持。

--enable-http
启用HTTP协议处理支持 
--enable-v4-mapped
使用相同的套接字同时处理IPv4和IPv6的连接,也就是启用地址映射。在FreeBSD、NetBSD、OpenBSD以外的平台上是默认值。 
--disable-v4-mapped
使用不同的套接字分别处理IPv4和IPv6的连接,也就是禁用地址映射。在FreeBSD、NetBSD、OpenBSD上是默认值。 
--enable-distcache
中启用distcache支持 
--enable-maintainer-mode
使用所有警告和调试符号编译源代码,请勿用于正式服务器,它会影响性能。 
--enable-exception-hook
允许在子进程崩溃以后启用一个钩子来运行异常处理程序。参见 指令 
--enable-pie
编译为位置的(Position Independent)可执行程序 
--with-port=PORT
设定 的默认的监听端口[默认为: 80],该值仅在生成默认配置文件 httpd.conf时使用。 
--with-program-name=NAME
指定可执行程序的名字[默认为: httpd],若使用此选项则默认配置文件的名字将同时变成" NAME.conf"。 

译者注:下述选项并未出现在官方手册中,译者不保证其真实性,仅供有兴趣的玩家参考。

--enable-nonportable-atomics
若只打算在486以上的CPU上运行Apache ,那么使用该选项可以启用更加高效的基于互斥执行的 。 
--disable-threads
禁用线程支持,如果不使用线程化的MPM ,可以关闭它以减少系统开销。 
--disable-lfs
在32-bit平台上禁用大文件支持(large file support) 
--enable-threads
启用线程支持,在线程型的MPM上必须打开它 
--disable-ipv6
禁用IPv6支持 
--disable-dso
禁用DSO支持 

这些指令用于定义特殊程序包相关的选项。

--with-included-apr
在编译时强制使用当前源代码中绑定的APR版本,仅在2.2.3以后的版本中可用。 
--with-apr=DIR|FILE
是httpd源码的一部分并会自动与httpd一起创建。如果你想使用一个已经存在的APR ,就必须在这里指定 apr-config脚本的路径。可以使用此脚本的绝对路径或已有的APR安装目录( apr-config必须位于此目录或者其下的" bin"子目录中)。 
--with-apr-util=DIR|FILE
Apache可移植运行时工具包(APU)是httpd源码的一部分并会自动与httpd一起创建。如果你想使用一个已经存在的APU ,就必须在这里指定 apu-config脚本的路径。可以使用此脚本的绝对路径或已有的APU安装目录( apu-config必须位于此目录或者其下的" bin"子目录中)。 
--with-ssl=DIR
如果启用了  , configure脚本将会自动搜寻已经安装的OpenSSL ,你可以在这里指定OpenSSL SSL/TLS工具包的位置。 
--with-sslc=DIR
使用 RSA SSL-C SSL/TLS 工具包代替OpenSSL ,并指定 RSA SSL-C SSL/TLS 的位置。 
--with-z=DIR
如果你启用了压缩模块(比如 ), configure脚本将会自动搜寻已经安装的 zlib库,你可以在这里指定它的安装路径。 
--with-perl=DIR
有些用Perl写的支持脚本,如  ,需要Perl5解释器(5.003或以上的版本就足够了)。如果系统中存在多个Perl解释器,比如有系统提供的Perl 4 ,还有你自己安装的Perl 5 ,推荐你使用该选项来指定正确的版本。如果没有Perl 5也没关系,这并不影响Apache httpd的编译和安装,只是相关的支持脚本不能使用而已。 
--with-pcre=DIR
5.0版的Perl兼容正则表达式库(PCRE)已经被包含进来了,如果你想使用系统中已经安装好的PCRE ,就可以在这里指定其安装路径。 
--with-ldap=DIR
一些Apache模块,比如 需要APU支持LDAP(默认并不支持),只要使用其中之一,就要使用该选项指定LDAP的安装路径。 

一些Apache模块,比如需要使用DBM数据库,APU中已经包含了SDBM ,所以这个数据库总是可用的。如果你想使用其他类型的数据库,就要使用以下选项:

--with-gdbm[=path]
使用GNU DBM代替SDBM;如果不指定 path ,则 configure脚本将会在默认路径上搜索GNU DBM的包含文件和库的位置。如果指定 path ,则 configure脚本会在 path/libpath/include目录中搜索GNU DBM的包含文件和库。还可以使用" inc-path:lib-path"的形式分别指定GNU DBM的包含文件和库的位置。 
--with-ndbm[=path]
使用New DBM代替SDBM;如果不指定 path ,则 configure脚本将会在默认路径上搜索New DBM的包含文件和库的位置。如果指定 path ,则 configure脚本会在 path/libpath/include目录中搜索New DBM的包含文件和库。还可以使用" inc-path:lib-path"的形式分别指定New DBM的包含文件和库的位置。 
--with-berkeley-db[=path]
使用Berkeley DB代替SDBM;如果不指定 path ,则 configure脚本将会在默认路径上搜索Berkeley DB的包含文件和库的位置。如果指定 path ,则 configure脚本会在 path/libpath/include目录中搜索Berkeley DB的包含文件和库。还可以使用" inc-path:lib-path"的形式分别指定Berkeley DB的包含文件和库的位置。 

注意

DBM数据库选项是由APU提供并传递给APU配置脚本的。所以如果使用 --with-apr-util 指定一个已安装的APU来代替,那么这些选项便无效。你可以同时使用几种不同的DBM实现,然后使用运行时配置动态选择其中之一。

--enable-static-support
使用静态连接(默认为动态连接)编译所有二进制支持程序。若不使用该选项也可以使用下面的选项分别指定每个支持程序: 
--enable-static-ab
使用静态连接编译
--enable-static-checkgid
使用静态连接编译 checkgid
--enable-static-htdbm
使用静态连接编译
--enable-static-htdigest
使用静态连接编译
--enable-static-htpasswd
使用静态连接编译
--enable-static-logresolve
使用静态连接编译
--enable-static-rotatelogs
使用静态连接编译
--enable-suexec
使用这个选项以启用  ,它可以允许你为CGI程序指定uid和gid 。 如果你不精通suexec的工作机制,请不要使用它!

仅在启用了上述选项的情况下,才可以使用以下选项微调的各种特性。方括号"[]"内是默认值。参见以获得更多信息。

--with-suexec-bin
二进制文件目录[ --sbindir
--with-suexec-caller
允许调用 的用户,必须和运行 子进程的用户相同。 
--with-suexec-docroot
允许 对其中的文件具有执行权限的根目录[ --datadir/htdocs
--with-suexec-gidmin
允许执行 的最小GID[100] 
--with-suexec-logfile
日志文件名[默认文件名为: suexec_log ,位于 --logfiledir目录下] 
--with-suexec-safepath
"安全"的 PATH环境变量的值[ /usr/local/bin:/usr/bin:/bin
--with-suexec-userdir
用户主目录下允许 对其中的文件具有执行权限的子目录,仅在将 和 (由 提供支持)一起使用的情况下才需要设置此选项。[ public_html
--with-suexec-uidmin
允许执行 的最小UID[100] 
--with-suexec-umask
进程的 umask[取决于系统的设定] 

可以通过指定某些环境变量来修改configure脚本的默认选择,或者帮助configure脚本找到名字和/或位置不标准的库和程序。

CC
C编译器 
CFLAGS
C编译器的flags 
CPP
C预处理程序 
CPPFLAGS
C/C++预处理程序flags,比如使用" -Iincludedir"指定一个非标准的头文件目录 includedir 。 
LDFLAGS
连接器flags,比如使用"-L -Llibdir"指定一个非标准的库文件目录 libdir 。 

 原文出处:http://apache.jz123.cn/programs/configure.html#installationdirectories