1.说明
在*nix环境下,经常通过源码安装软件。./configure make make install基本上都是定式了。本文对于configure的基本原理进行阐述,并借助http://concurrencykit.org/开源包的configure文件,对于实际的运行过程进行分析。
2.configure基本背景
configure文件主要是对于软件在不同平台编译时,对于硬件平台环境、编译器、头文件、安装目录等进行配置,生成makefile文件,然后再进行编译。(在configure还没有执行的时候,直接make,出现错误*** No targets specified and no makefile found. Stop.应该都遇到过吧 ^_^)。
configure文件通常是用bash脚本编写。也就是通过执行一系列的脚本生成最后的makefile文件。所以读者可以先看看bash相关的基础内容。
3.configure模块分析
在configure执行的过程中,通常涉及到(1)基本设置;(2)参数解析;(3)操作系统相关;(4)平台架构信息;(5)编译环境检查;(6)头文件检查;(7)makefile文件生成等几个方面。我们对于上述几个执行部分逐一进行分析。
3.1基本设置
通常configure文件中含有了软件版本信息、基本路径设置等配置信息。
#变量替换,可以参照:http://en.kioskea.net/faq/1310-replacing-variables-in-bash-shell
#VERSION=${VERSION:-'0.2.8'} var=${var:-‘default’}
#如果 VERSION 没有被设置,则使用默认的’0.2.8’
VERSION=${VERSION:-'0.2.8'}
VERSION_MAJOR='0'
BUILD="$PWD/build/ck.build"
PREFIX=${PREFIX:-"/usr/local"}
3.2参数解析
在执行configure的时候,通常可以输入路径等参数,对于安装路径、lib包位置等进行设置(比如:./configure --prefix=/usr/local)。
#$*代表输入的参数列表,从参数 1 开始,即:忽略了本身的 configure
#value=获得输入的参数,并且取得参数的值
# sed -e 's/^[^=]*=\(.*\)/\1/'对于参数进行解析,获得”=”之后的内容
#其中,^[^=]*= 从每行开头查找不是=开始的多个字符且以=结束,
#\(.*\)/\1 将=之后的内容替换整个行
#可以参照:http://www.grymoire.com/Unix/Sed.html#uh-4
for option in $*; do
value=`echo "$option" | sed -e 's/^[^=]*=\(.*\)\1/'`
#比如:输入./configure -–help
case "$option" in
#则通过 case 语句,执行 help 中的语句
--help)
echo "Usage: ./configure [OPTIONS]"
;;
#*为通配符,即option为"--profile=*"
--profile=*)
PROFILE=$value
;;
--prefix=*)
PREFIX=$value
;;
--includedir=*)
HEADERS=$value
esac done
对于输入的参数逐一进行解析,根据不同的参数设定不同的参数值。 继续阅读 →