linux软件证券,linux

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

对于输入的参数逐一进行解析,根据不同的参数设定不同的参数值。 继续阅读 →