automake学习二

简介

本文对应于automake官方文档的第二章,属于重点笔记,如果阅读发现问题可以参阅automake官方

Standard Makefile Targets

以下列出了一些GNU coding重要实用的目标

  • make install

      从文件树中拷贝文件到系统目录
    
  • make install-strip

      strip ELT文件,缩减文件大小
    
  • make uninstall

      删除安装的文件
    
  • make clean

      删除文件树中由make all产生的文件
    
  • make distclean

      删除由./configure产生的文件
    
  • make check

      运行单元测试
    
  • make installcheck

      检查安装的可执行文件或者库文件
    
  • make dist

      从资源文件中产生package-version.tar.gz
    
  • make distcheck

标准目录变量

目录变量 默认值
prefix /usr/local/
exec_prefix ${prefix}
bindir ${exec_prefix}
libdir ${exec_prefix}
includedir ${prefix}/include
datarootdir ${prefix}/share
datadir ${datarootdir}
mandir ${datarootdir}/man
infodir ${datarootdir}/info
docdir ${datarootdir}/doc/${PACKAGE}

常用标准配置变量

配置变量 含义
CC C编译命令
CFLAGS C编译标志
CXX C++编译命令
CXXFLAGS C++编译标志
LDFLAGS 链接标志
CPPFLAGS C/C++预编译标志

例子

./configure --prefix ~/usr CC=gcc-3 \
CPPFLAGS=-I$HOME/usr/include LDFLAGS=-l$HOME/usr/lib

使用config.site重写默认的配置

当要使用相同的配置安装许多packages,推荐使用prefix/share/config.site文件,./configure在执行前会自动加载

例如在上面的例子中,创建~/usr/share/config.site

test -z "$CC" && CC=gcc-3
test -z "$CPPFLAGS" && CPPFLAGS=-I$HOME/usr/include
test -z "$LDFLAGS" && LDFLAGS=-L$HOME/usr/lib

则任何使用--prefix ~/usr,都会执行上面的脚本,定义这3个变量

“并行编译目录树”

GNU编译系统区分两颗树:目录树,编译树。为了使编译产生的文件不影响目录树,可以在子目录中进行编译

如下例子

tar xzf ~/amhello-1.0.tar.gz
cd amhello-1.0
mkdir build && cd build
../configure
make

交叉编译

交叉编译一般涉及两个变量--build=build--host=host,--target=target一般使用在编译编译工具时使用,一般情况不需要使用

例如编译win32的可执行文件:

./configure --build i686-pc-linux-gnu --host i586-mingw32msvc
make
cd src && file hello.exe

安装时重命名程序

一般可以使用下面3个变量

  • –program-prefix=prefix

      给安装的程序增加前缀
    
  • –program-suffix=suffix

      给安装的程序增加后缀
    
  • –program-transform-name=program

      对安装的程序使用sed
    

例如

./configure --program-prefix text-
make
sudo make install

此语句告诉automake四件事

编译安装包使用使用DESTDIR

直接看例子

./configure --prefix /usr
make
make DESTDIR=$HOME/inst install
cd ~/inst
find .-type f -print > ../files.lst
tar czf ~/amhello-1.0-i686.tar.gz 'cat ../files.lst'