gnu构建(一)
Makefile.inMakefile.am基本上都是一系列make变量定义。
当需要在与其开发平台不同的平台上构建包时,通。常需要调整其Makefile。例如,编译器可能有另一个名称或需要更多的选项。
David J. MacKenzie手工制作了一个名为configure的小shell脚本来自动调整Makefile。
GNU编码标准还指定了变量的层次结构来表示安装目录。 其中包括:
prefix /usr/local
exec_prefix ${prefix}
bindir ${exec_prefix}/bin
libdir ${exec_prefix}/lib
includedir ${prefix}/include
datarootdir ${prefix}/share
datadir ${datarootdir}
mandir ${datarootdir}/man
infodir ${datarootdir}/info
docdir ${datarootdir}/doc/${PACKAGE}
GNU编码标准还定义了一组在构建过程中使用的标准配置变量。 以下是一些:
CC
C compiler commandC编译器命令
CFLAGS
C compiler flagsC编译器标志
CXX
C++ compiler commandC++编译器命令
CXXFLAGS
C++ compiler flagsC++编译器标志
LDFLAGS
linker flags
CPPFLAGS
C/C++ preprocessor flagsC/C++预处理器标志
使用:
~/amhello-1.0 % ./configure --prefix ~/usr CC=gcc-3 \
CPPFLAGS=-I$HOME/usr/include LDFLAGS=-L$HOME/usr/lib
公共设置:
如果有prefix/share/config.site的文件,configure将在执行开始时将其作为源。比如:
~/usr/share/config.site
name只要configure脚本使用--prefix ~/usr作为前缀
VPATH构建
mkdir build && cd build
产生源码树和构建树分离,构建树在configure运行时以当前目录为根,并填充有所有目标文件、程序、库和其他从源代码构建的派生文件。源代码树的根目录是包含配置脚本的目录。
VPATH构建的作用:
一种是使用多种配置构建相同的源。如下展示O3和O0两套编译:
~ % tar zxf ~/amhello-1.0.tar.gz
~ % cd amhello-1.0
~/amhello-1.0 % mkdir debug optim && cd debug
~/amhello-1.0/debug % ../configure CFLAGS='-g -O0'
...
~/amhello-1.0/debug % make
...
~/amhello-1.0/debug % cd ../optim
~/amhello-1.0/optim % ../configure CFLAGS='-O3 -fomit-frame-pointer'
...
~/amhello-1.0/optim % make
...
也可以编译给不同的主机:
[HOST1] ~ % mkdir /tmp/amh && cd /tmp/amh
[HOST1] /tmp/amh % /nfs/src/amhello-1.0/configure
...
[HOST1] /tmp/amh % make && sudo make install
...
[HOST2] ~ % mkdir /tmp/amh && cd /tmp/amh
[HOST2] /tmp/amh % /nfs/src/amhello-1.0/configure
...
[HOST2] /tmp/amh % make && sudo make install
...
浙公网安备 33010602011771号