NodeJS下载:http://nodejs.org/
说明:NodeJS需要openssl-devel库的支持。如果系统中没有安装此库,configure的时候会提示。Ubuntu上安装此库的方式是:sudoapt-get install libssl-dev
环境:Ubuntu LTS 10.04, 64bit
GCC版本:
#gcc --version
gcc (Ubuntu 4.4.3-4ubuntu5) 4.4.3
Copyright (C) 2009 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
#
编译:
#./configure --prefix=./prefix/
#make
#make install
#./node -v
其中prefix为自己建立的一个文件夹,保存编译结果。
说明:下面的内容很乱,因为说不清楚,只是为了记录一些东西,如有人阅读此文,请跳过这段内容!如果有编译的问题,可以直接探讨!
构建过程:
Nodejs的build,不是使用的autoconf/automake的方式,主要是利用了scons工具,这是一个基于Python的构建系统。下面是Nodejs的configure内容:
#! /bin/sh
# v8 doesn't like ccache
if [ ! -z "`echo $CC | grep ccache`" ]; then
echo "Error: V8 doesn't like ccache. Please set your CC env var to 'gcc'"
echo " (ba)sh: export CC=gcc"
exit 1
fi
CUR_DIR=$PWD
#possible relative path
WORKINGDIR=`dirname $0`
cd "$WORKINGDIR"
#abs path
WORKINGDIR=`pwd`
cd "$CUR_DIR"
"${WORKINGDIR}/tools/waf-light" --jobs=1 configure $*
exit $?
很显然,它调用了tools/waf-light文件,打开可以知道这是一个python脚本。
同样打开makefile文件,里面也会invoke其他的python脚本去执行build过程。下面是大概的一个构建过程中的一些脚本的调用过程(PS:只是大概分析,详细内容可以去专门学习这个构建系统的使用):
(1)makefile调用tools/waf-light
从makefile第一行就可以看到了。另外,configure的脚本也是调用这个waf-light的。
(2)waf-light和Scripting.py
if __name__ == '__main__':
import Scripting
Scripting.prepare(t, cwd, VERSION, wafdir)
其中的主要部分就是这里,调用了Scripting模块,位于tools/wafadmin/Scripting.py,其prepare方法大概就是一些基本的配置啊检查啊什么的,会调用prepare_impl,然后调用main,主要有以下内容: