configure - 配置源代码树

简介: configure脚本配置Apache的源代码树并且将其安装到指定的平台上。丰富的选项允许你根据自己的特定状况和特定需求对Apache进行定制。 这个脚本位于源代码树的根目录下,并且只能用于类Unix操作系统。

configure脚本配置Apache的源代码树并且将其安装到指定的平台上。丰富的选项允许你根据自己的特定状况和特定需求对Apache进行定制。

这个脚本位于源代码树的根目录下,并且只能用于类Unix操作系统。要了解其他平台的信息,参见:针对特定平台的说明文档。

top

语法

你必须在源代码树的根目录下调用configure脚本,语法如下:

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

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

top

选项 配置选项

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

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

这些选项控制着安装目录的结构。安装目录的结构取决于所选择的布局。方括号"[]"内是默认值。

--prefix=PREFIX体系无关文件的顶级安装目录PREFIX ,也就Apache的安装目录。[/usr/local/apache2] --exec-prefix=EPREFIX体系相关文件的顶级安装目录EPREFIX ,把体系相关的文件安装到不同的位置可以方便地在不同主机之间共享体系相关的文件。[PREFIX]

默认情况下,make install 将会把所有文件分别安装到/usr/local/apache2/bin , /usr/local/apache2/lib 目录下。可以用 --prefix 指定一个不同于/usr/local/apache2的安装前缀,比如:--prefix=$HOME 。

定义一个目录布局 --enable-layout=LAYOUT使用名为LAYOUT的布局配置所有源代码和编译脚本。这样就允许你在安装Apache时分别指定不同文件的安装位置。 config.layout文件中包含了默认布局的示例,你可以根据它创建你自己的布局。这个文件中的不同布局使用...段进行分组,其中的FOO就是布局名。默认的布局是Apache 。 安装目录微调

可以使用下面的选项微调安装目录。下列选项的默认值由autoconf自动设置并在方括号"[]"内说明。

--bindir=DIR用户可执行目录DIR 。用于存放对网站管理员很有帮助的 htpasswd, dbmmanage之类的支持程序。
[EPREFIX/bin] --datadir=DIRWeb服务器只读的体系无关数据目录DIR 。虽然autoconf提供了该选项,但Apache并未使用它。
[PREFIX/share] --includedir=DIRApache的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服务器所必须的 httpd, apachectl, suexec之类的服务程序。
[EPREFIX/sbin] --sharedstatedir=DIR可写的体系无关数据目录DIR 。虽然autoconf提供了该选项,但Apache并未使用它。
[PREFIX/com] --sysconfdir=DIR只读的单一机器数据目录DIR ,用于存放httpd.conf和mime.types之类的服务器配置文件。
[PREFIX/etc] 系统类型

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

--build=BUILD指定编译工具所在系统的系统类型BUILD 。
[config.guess脚本的检测结果] --host=HOST指定Apache HTTP服务器将要运行的目标系统类型HOST 。
[BUILD] --target=TARGETconfigure 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将忽略MODULE和MODULE-LIST中的拼写错误,注意仔细拼写。用于MODULE和MODULE-LIST中的名称是"mod_NAME"中去掉"mod_"并将剩余部分中的下划线"_"替换为连字符"-"以后的结果,比如"mod_log_config"模块应当表示为"log-config"。 模块列表

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

模块名称

image

image

image

image

 

多路处理模块(MPM)

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

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

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

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

module-file是模块的源代码文件名,该文件必须位于Apahe源代码目录树的"modules/module-type"目录下,如果configure没有在那里找到module-file ,则将它看作一个绝对路径名并尝试将其复制到"modules/module-type"目录中,如果"modules/module-type"目录不存在,configure将新建一个"modules/module-type"目录并在其中放置一个标准的Makefile.in文件。这种方法有两个明显的缺陷:

  1. 模块的源代码必须是单一文件
  2. 模块只能静态连接进核心,而不能作为DSO模块

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

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

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

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

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

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

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

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

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

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

top

环境变量

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

CCC编译器 CFLAGSC编译器的flags CPPC预处理程序 CPPFLAGSC/C++预处理程序flags,比如使用"-Iincludedir"指定一个非标准的头文件目录includedir 。 LDFLAGS连接器flags,比如使用"-L-Llibdir"指定一个非标准的库文件目录libdir 。
相关文章
|
24天前
|
存储 缓存 安全
【cmake 生成配置文件】CMake与现代C++:配置文件宏的深度探索与应用
【cmake 生成配置文件】CMake与现代C++:配置文件宏的深度探索与应用
49 0
|
23天前
|
算法 Linux 开发者
CMake深入解析:打造高效动态链接库路径设置
CMake深入解析:打造高效动态链接库路径设置
44 0
|
16天前
C/C++test两步完成CMake项目静态分析
通过将C/C++test集成到CMake项目中,并根据项目的需要进行配置,可以在两步内完成CMake项目的静态分析。这样可以帮助开发人员及时发现并修复潜在的代码问题,提高代码质量和可靠性。
8 0
|
23天前
|
算法 程序员 编译器
【cmake 踩坑记录】CMake文件安装深入解析:EXCLUDE的奥秘与替代方案
【cmake 踩坑记录】CMake文件安装深入解析:EXCLUDE的奥秘与替代方案
41 0
|
5月前
|
XML 运维 数据可视化
使用cmake 构建构建新项目的时候,编译提示库找不到怎么办?
以上是一些常见的解决方案,但具体解决方案可能因具体情况而异。如果以上解决方案无法解决问题,请提供更多详细信息,留在评论区,以便博主更好地帮助您解决问题。
123 0
|
11月前
|
编译器 C++
[✔️]CMake生成的VisualStudio项目,Qt的头文件目录默认添加了编译选项,如何在添加到c++头文件目录
[✔️]CMake生成的VisualStudio项目,Qt的头文件目录默认添加了编译选项,如何在添加到c++头文件目录
107 0
解决办法:configure后,没有更新Makefile
解决办法:configure后,没有更新Makefile
127 0
打包deb时,实际上是两层包名目录的结构
打包deb时,实际上是两层包名目录的结构
36 0
EasySwoole安装,包含所有组件
所有组件可以直接用,无需再一个一个引入,总大小8.6Mb
78 0
|
Java
编译freetype:如果链接路径中能找到libpng,就会自动依赖,没有也能编译通过
编译freetype:如果链接路径中能找到libpng,就会自动依赖,没有也能编译通过
139 0