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
...
posted @ 2025-02-27 21:21  老禾的账本  阅读(10)  评论(0)    收藏  举报