Automake基本用法
一. 确认你的系统安装有GNU的如下软件:
1. automake
2. autoconf
3. m4
4. perl
5. 如果你需要产生共享库(shared library)则还需要GNU Libtool
二. 用automake生成Makefile的步骤如下:
1. 由源文件通过autoscan命令生成configure.scan,然后修改configure.scan并重命名为configure.in
2. 由aclocal命令生成aclocal.m4
3. 由autoconf命令生成configure
4. 编辑一个Makefile.am(基本是一系列make的宏定义,偶尔也会出现make规则),由automake命令生成Makefile.in
5. 执行./configure生成Makefile
三. automake支持三种目录层次:flat、shallow和deep。
* flat包指的是所有文件都在一个目录中的包。为这类包提供的Makefile.am不需要SUBDIRS这个宏。所有源文件及自己写的头文件都位于当前目录里面,没有子目录。
* deep包指的是所有的源代码都被储存在子目录中的包,顶层目录主要包含配置信息。deep包的顶层Makefile.am将包括宏SUBDIRS,但没有其它定义需要创建的对象的宏。所有源文件及自己写的头文件都位于当前目录的一个子目录里面,而当前目录里没有任何源文件。
* shallow包指的是主要的源代码储存在顶层目录中,而各个部分(典型的是库)则储存在子目录中的包。主要源文件在当前目录里,而其它一些实现各部分功能的源文件各自位于不同目录。
四. 下面以一个例子说明shallow层次结构的源文件如何自动生成Makefile文件。
例子源程序结构如下:
hello是我们的工作目录,hello目录下有main.c和comm、tools、db、network、interface等五个目录。 comm目录下有comm.c和comm.h,tools目录下有tools.c和tools.h,同样其它目录分别有db.c、db.h、network.c、network.h、interface.c、interface.h。
按照如下步骤来自动生成Makefile:
1. autoscan
生成configure.scan文件
2. mv configure.scan configure.in,并编辑它成下面这样:
# -*- Autoconf -*-
# Process this file with autoconf to produce a configure script.
AC_PREREQ(2.61)
#AC_INIT(FULL-PACKAGE-NAME, VERSION, BUG-REPORT-ADDRESS)
AC_INIT(hello.c, 1.0)
AM_INIT_AUTOMAKE(hello, 1.0)
#AC_CONFIG_SRCDIR([hello.c])
#AC_CONFIG_HEADER([config.h])
# Checks for programs.
AC_PROG_CC
# Checks for libraries.
# Checks for header files.
# Checks for typedefs, structures, and compiler characteristics.
# Checks for library functions.
AC_OUTPUT(Makefile)
configure.in文件内容是一系列GNU m4 的宏,这些宏经autoconf处理后会变成检查系统特性的shell scripts。configure.in内宏的顺序并没有特别的规定,但每一个configure.in文件必須在所有宏前加入AC_INIT宏,然后在所有宏的最后加上AC_OUTPUT宏。可先用autoscan扫描原始文件以产生一个 configure.scan 文件,再对 configure.scan 做些修改成 configure.in 文件。
3. aclocal
生成aclocal.m4文件
4. autoconf
生成可执行的configure文件
5. 编辑一个Makefile.am文件,内容如下:
AUTOMAKE_OPTIONS=foreign
bin_PROGRAMS=hello
hello_SOURCES=main.c comm/comm.c comm/comm.h tools/tools.c tools/tools.h db/db.c db/db.h network/network.c network/network.h interface/interface.c interface/interface.h
# 如果定义多个执行文件,则对每个执行程序都要定义相对的filename_SOURCES
这样最后将利用上述hello_SOURCES源文件生成hello程序。
6. automake --add-missing
生成Makefile.in
7. ./configure
生成Makefile
make
make install
make clean
make distclean (连Makefile也清掉)
make dist (创建一个名为PACKAGE-VERSION.tar.gz的发行版)
图解:

文章摘自: http://hi.baidu.com/red_woods/item/951544e6cb24aed3ea34c94f
其他资源: http://www.cnblogs.com/ericdream/archive/2011/12/09/2282359.html
http://www.ibm.com/developerworks/cn/linux/l-makefile/
Automake: https://www.gnu.org/software/automake/
Automake基本用法的更多相关文章
- automake - 使用 autotools 工具集
一般而言,对于小项目或玩具程序,手动编写 Makefile 即可.但对于大型项目,手动编写维护 Makefile 成为一件费时费力的无聊工作. 本文介绍 autotools 工具集自动生成符合 Lin ...
- automake连载--Linux下使用automake入门
http://blog.csdn.net/shanzhizi/article/details/30246587 近来重要要总结一下automake的用法了,连载几篇网上已有的文章,以供参考. 作为Li ...
- linux下automake用法
linux下automake用法 2017年02月06日 09:21:14 阅读数:3684 标签: makemakefilegnulinux 作为Linux下的程序开发人员,大家一定都遇到过Ma ...
- 使用autoconf和automake生成Makefile文件(转)
Makefile好难写 曾经也总结了一篇关于Makefile的文章<make和makefile的简单学习>.但是,总结完以后,发现写Makefile真的是一件非常痛苦的事情,的确非常痛苦. ...
- CMake的含义和用法解读
什么是 CMake 你或许听过好几种 Make 工具,例如 GNU Make ,QT 的 qmake ,微软的 MS nmake,BSD Make(pmake),Makepp,等等.这些 Make 工 ...
- EditText 基本用法
title: EditText 基本用法 tags: EditText,编辑框,输入框 --- EditText介绍: EditText 在开发中也是经常用到的控件,也是一个比较必要的组件,可以说它是 ...
- jquery插件的用法之cookie 插件
一.使用cookie 插件 插件官方网站下载地址:http://plugins.jquery.com/cookie/ cookie 插件的用法比较简单,直接粘贴下面代码示例: //生成一个cookie ...
- Java中的Socket的用法
Java中的Socket的用法 Java中的Socket分为普通的Socket和NioSocket. 普通Socket的用法 Java中的 ...
- [转载]C#中MessageBox.Show用法以及VB.NET中MsgBox用法
一.C#中MessageBox.Show用法 MessageBox.Show (String) 显示具有指定文本的消息框. 由 .NET Compact Framework 支持. MessageBo ...
随机推荐
- 配置文件的继承与覆盖: Machine.config / Web.config /子目录 Web.config
C#有三种级别的配置文件: 机器级别 machine.config 在 C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Config\machine.c ...
- JSF结合Spring 引入ViewScope
当JSF项目的faceConfig中配置了Spring的配置代码 <application> <el-resolver>org.springframework.web.jsf. ...
- Generate web.xml deployment descriptor
eclipse 使用tomcat7.0建立Dynamic Web Project 时,next至步骤“Web Module”,此时勾选选项“Generate web.xml deployment de ...
- 有关Backgroundworker
(一)Backgroundworker取消时应该用的有关代码: CancelAsync方法是在前台主线程用的,CancellationPending属性是在后台子线程用的.实际的使用方式应该是这样的: ...
- python window使用paramiko简单监控数据指标数据采集
#!/usr/bin/python #-*- coding: utf-8 -*- #++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ...
- 北京儿研所自制药一览表,宝妈们必读!<转>
原帖地址:http://www.360doc.com/content/15/0910/22/22655489_498339090.shtml
- DAY8-python之网络编程
一.客户端/服务器架构 1.硬件C/S架构(打印机) 2.软件C/S架构 互联网中处处是C/S架构 如黄色网站是服务端,你的浏览器是客户端(B/S架构也是C/S架构的一种) 腾讯作为服务端为你提供视频 ...
- 3-在EasyNetQ上使用SSL连接(黄亮翻译)
EasyNetQ可以通过SSL进行连接.这篇指南的作者Gordon Coulter最初为回应一个提问写的. 首先,你必须仔细依据https://www.rabbitmq.com/ssl.html文章中 ...
- Hive UDF开发 第一个例子
package udf; import org.apache.hadoop.hive.ql.exec.UDF; public class helloudf extends UDF{ public St ...
- android中finish和system.exit方法退出的区别
finish只是将此activity推向后台,并没有释放资源. 而system.exit则是杀死进程,会释放资源