我前面说了很多如何用gcc或 Makefile怎么编译的东东,但在Linux下装过软件的都应当见过,很多源码安装的包是用Automake
来编译的。输入下"./configure","make","make install"就装上了。Automake就是有群人觉得写Makfile不方便,特别是工程文件多
目录复杂时。所以就搞了这么个自动生成Makefile的开源的东东。类似的工具还有cmake和qmake。
     Automake功能还是很强大的,不想手写Makefile的可以试试。
     我下面有详细说明.
一. 详解Automake的编译做法,编译出一个可运行程序。
二. 如何清理Automake生成的文件和目录。
三. Automake编译中的常见问题
    测试文件:
       main.c  add.c sub.c calc.h
一. 详解Automake的编译做法,编译出一个可运行程序。
 1. autoscan
 //扫描源代码以搜寻普通的可移植性问题,
 //比如检查编译器,库,头文件等,生成文件configure.scan,它是configure.ac的一个雏形。
2. cp configure.scan configure.in
3. vi configure.in
     configure.in 文件的更改是件很麻烦的事。Automake自己定义了很多宏。而autosca生成的
    这个文件中有几个宏是必须要改的,甚至要依编译情况,还要手工加些宏在上面。
    常见的要改更的有下面几个.
           #AC_INIT([FULL-PACKAGE-NAME], [VERSION], [BUG-REPORT-ADDRESS])
AC_INIT(add.c,1.0)
AM_INIT_AUTOMAKE(xcldemo,1.0)
AC_CONFIG_SRCDIR([add.c])
AC_CONFIG_HEADERS([config.h]) 

          //AC_OUTPUT表示最后要生成Makefile

AC_OUTPUT(Makefile) 

4. aclocal
 //由configure.in生成aclocal.m4
5. //编译共享库前,运行 libtoolize -f -c 但这里好像没用
   
如果少了 ltmain.sh
   就执行 libtoolize --automake --copy --debug --force
     或者
libtoolize -f -c
6. autoconf
  //autoconf:将configure.ac中的宏展开,生成configure脚本。这个过程可能要用到aclocal.m4中定义的宏
  //由configure.in和aclocal.m4生成configure脚本
7. 如果没有生成config.h.in,则autoheader
  
8. vi Makefile.am
     这个文件是除了上面的configure.in以后,在Automake编译过程中要手工编写的另一个文件。
     它的作用决定了编译出来是什么样的程序,如编译出动态库还是静态库还是其它什么。
     这个文件相当蛋疼。 写法大至和手写Makefile差不多,生成定义要编译哪些文件,这些文件要引用哪些目录下的库或
     库文件。 要用到哪些编译参数等等。光这个还好说,问题是Automake还自定义了很多的宏。你要按这些宏及规则来
     写。而且你还要在这些宏前加上你要生成的库的名字。这样弄下来,个人觉得其实和单独写出个Makefile文件是一样的工作量。
AUTOMAKE_OPTIONS=foreign
bin_PROGRAMS=xcldemo
xcldemo_SOURCES=main.c add.c sub.c calc.h 


9. automake -a
    //automake --add-missing
    //由Makefile.am和configure.in生成各级目录下的Makefile.in 

10. 执行configure生成Makefile ,ls中应当可以看到Makefile已经产生了.
   
./configure    //执行的时候会扫描各个目录下的Makefile.in生成不同的Makefile
11. make
12.测试编译结果
[root@ol64 test4_auto]# ./xcldemo
add() = 8
sub() = 2
MAIL:xcl_168@aliyun.com
BLOG:http://blog.csdn.net/xcl168
13.打包一个tar.gz
[root@ol64 test4_auto]# make dist 
[root@ol64 test4_auto]# ls *.tar.gz
xcldemo-1.0.tar.gz 


二. 如何清理Automake生成的文件和目录。
 a. 首先理解下Automake生成的目录结构
 user input files optional input processes output files
 
================ ============== ========= ============
 
.——–,
 
| | – - -> COPYING
 
| | – - -> INSTALL
 
| |——> install-sh
 
| |——> missing
 
|automake|——> mkinstalldirs
 
configure.ac ———————–>| |
 
Makefile.am ———————–>| |——> Makefile.in
 
| |——> stamp-h.in
 
.—+ | – - -> config.guess
 
| | | – - -> config.sub
 
| `——+-’
 
| | – - – -> config.guess
 
|libtoolize| – - – -> config.sub
 
| |——–> ltmain.sh
 
| |——–> ltconfig
 
`———-’
//-------------------------------------------------------------------------

b.  理解了上面的目录结构后,就后清理了
##清掉Makfile生成的东东
make clean
##连Makefile也清掉
make distclean  
##如需要,保留输入的configure.in及Makefile.am文件
mv configure.in configure.in_old
mv Makefile.am Makefile.am_old

 
##清掉aclocal  
rm -rf aclocal.m4
rm -rf autom4te.cache
rm -rf autoscan.log
 
##清掉autoheader 
rm -rf config.h.in
 
##libtoolize
rm -rf ltmain.sh
 
##automake -a
rm -rf install-sh
rm -rf missing
rm -rf depcomp
 
##清掉.configure 
rm -rf config.guess
rm -rf Makefile.in
rm -rf stamp-h1
rm -rf .deps
rm -rf configure
rm -rf config.sub
rm -rf config.status
rm -rf configure.scan
 
--rm -rf configure.in
 

三.  Automake编译中的常见问题
1.如果编译出错,可以设为成中文显示错误
   解决:

locale -a #查看系统支持的语言

export LANG=zh_CN.GB18030 #将系统语言改为中文


2.编译过程中提示:
/bin/rm: cannot remove `libtoolt': No such file or directory
 解决:
1、确认libtool是否已经安装,如果没有安装的话,则先安装libtool
# yum -y install libtool
2、分别执行以下三条命令:
# autoreconf --force --install
# libtoolize --automake --force
# automake --force --add-missing
再重新编译安装,问题解决!

 3. aclocal时报下面的错误

root@localhost OA]# aclocal
configure.in:6: error: m4_defn: undefined macro: _m4_divert_diversion
autoconf/general.m4:464: AC_CONFIG_SRCDIR is expanded from...
configure.in:6: the top level
autom4te: /usr/bin/m4 failed with exit status: 1
aclocal: autom4te failed with exit status: 1
 解决:
     AC_INIT和AM_INIT_AUTOMAKE一定放在AC_CONFIG的前面才可以。


4. required file `config.h.in' not found
 解决:
    在执行automake --add-missing之前执行autoheader,生成config.h.in

MAIL: xcl_168@aliyun.com
Blog: http://blog.csdn.net/xcl168

编译小结(6)认识Automake的更多相关文章

  1. Windows10 + VS2015 (Win SDK10)环境下的64位 VTK编译小结

    之前在学习vtk过程中,感觉vtk的编译还是很简单的,基本上不会碰到什么棘手的错误.但是,当我在Win10+VS2015这个环境下配置时,却遇到了麻烦.经过一番折腾之后,终于将vtkbian编译成功了 ...

  2. gtest编译小结(ubuntu 12.10 , gtest 1.6.0)

    1 下载源码,解压之当前用户的主目录(~/) 2 进入make目录,执行make命令 cd ~/gtest-/make make 3 在ubuntu里编译出错,提示找不到lthread库.修改Make ...

  3. Shark简介、部署及编译小结

    http://blog.csdn.net/pelick/article/details/11964291 Shark简介 Shark即Hive on Spark,本质上是通过Hive的HQL解析,把H ...

  4. WebKit 在 Windows 平台下编译小结

    虽然WebKit 已经越来越多的被广大程序员接受,但其编译过程却非常之痛苦.下面将我编译WebKit 代码的经验与大家分享. 1) 获取WebKit 源代码 WebKit 源代码是使用Subversi ...

  5. Windows10 + VS2015 环境下对gdal2.0.1进行64bit编译小结

    这是官方给出的编译指导,但是在实践过程中有几点仍然需要特别注意. Tip 1:不要使用默认的"VS开发人员命令提示"工具,使用该工具会遭遇如下的错误: 正在创建库 gdal_i.l ...

  6. hadoop源码编译

    为何要自行编译hadoop源码,往往是由于官方提供的hadoop发行版都是基于32位操作系统,在操作hadoop时会发生warn.   准备软件: 1)JDK 2)Hadoop源码 3)Maven 4 ...

  7. Android混淆、反编译以及反破解的简单回顾

    =========================================================================虽然反编译很简单,也没下面说的那么复杂,不过还是转了过 ...

  8. 使用autoconf和automake生成Makefile文件(转)

    Makefile好难写 曾经也总结了一篇关于Makefile的文章<make和makefile的简单学习>.但是,总结完以后,发现写Makefile真的是一件非常痛苦的事情,的确非常痛苦. ...

  9. ubuntu和centos 编译安装nginx及常用命令

    转自http://www.cnblogs.com/piscesLoveCc/p/5794926.html 一. ubuntu安装 1. 安装依赖库 安装gcc g++的依赖库 ubuntu平台可以使用 ...

随机推荐

  1. Samba 4.x.x全版本存在命令执行漏洞

    Samba 4.0.0到4.1.10版本的nmbd(the NetBIOS name services daemon)被发现存在远程命令执行漏洞.CVE编号为CVE-2014-3560.目前官方已经发 ...

  2. Redis必要的一些配置

    [root@localhost202 redis-2.8.19]# /usr/local/redis/bin/redis-server >> /data/redis-start.txt   ...

  3. ffmpeg-2.3.3 configure for android

    #! /bin/shNDK=/usr/local/android-ndk-r10PREBUILT=${NDK}/toolchains/arm-linux-androideabi-4.9/prebuil ...

  4. POJ 1486 Sorting Slides (二分图关键匹配边)

    题意 给你n个幻灯片,每个幻灯片有个数字编号1~n,现在给每个幻灯片用A~Z进行编号,在该幻灯片范围内的数字都可能是该幻灯片的数字编号.问有多少个幻灯片的数字和字母确定的. 思路 确定幻灯片的数字就是 ...

  5. How to modify squashfs image

    /********************************************************************** * How to modify squashfs ima ...

  6. HDU 5296 Annoying problem (LCA,变形)

    题意: 给一棵n个节点的树,再给q个操作,初始集合S为空,每个操作要在一个集合S中删除或增加某些点,输出每次操作后:要使得集合中任意两点互可达所耗最小需要多少权值.(记住只能利用原来给的树边.给的树边 ...

  7. HDU 1041 Computer Transformation

    这道题目的意思是:一开始有一个数字 1 ,在接下来的时间中,计算机会按照如下规则进行扩展:                0 –> 1 0                1 –> 0 1 ...

  8. Myeclipse中相同变量高亮显示

    不小心搞不显示了,解决: windows/MyEclipse-> preferences-> java-> Editor-> Mark Occurences 勾选即可

  9. 本博客迁移到Github,之后停止更新

    本博客之后停止更新或者更新不是很及时,关注博客请移步   http://waylife.github.io 或者 http://blog.13kbook.com   谢谢支持. Update Time ...

  10. 10、TV UI

     TV UI布局 1. 为大屏幕提供适当的布局源文件. 2. 确保UI在一定距离仍然可以看清. 3. 为高清电视提供高分辨率的图标和图像. 1. 把屏幕上的导航控制菜单放在屏幕的左边或者右边,并且将 ...