注册 登录  
 加关注
查看详情
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

创思通信官网:www.csgsm.com

创思通信-引领物联网新时代 520ic.taobao.com

 
 
 

日志

 
 
 
 

利用autotools生成Makefile   

2010-04-15 16:49:55|  分类: Linux 、windows |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

对于一个较大的项目而言,完全手动建立Makefile是一件费力而又容易出错的工作。autotools系列工具只需用户输入简单的目标文档、依 赖文档、文档目录等就能够比较轻松地生成Makefile了。现在Linux上的软件研发一般都是用autotools来制作Makefile。
autotools工具主要有:aclocal、autoscan、autoconf、autoheader、automake。使用autotools主要就是利用各个工具的脚本文档来生成最后的Makefile。
这几个工具备没有安装能够用which命令来查看
#which aclocal
我们能够先看看总体流程,如下图所示:

p1
具体流程如下:
第一步 autoscan
使用autoscan在给定目录及其子目录树中检查源文档,假如没有给出目录,就在当前目录及其子目录树中进行检查。最终生成两个文档:configure.scan、autoscan.log
其中,configure.scan是configure.in的原型模版文档。而configure.in是autoconf的脚本配置文档。所以下一步的工作就是要对
configure.scan进行修改,将其转化为configure.in。
第二步 autoconf
configure.scan文档内容如下:
说明:
1、以“#”号开始的是行为注释。
2、AC_PREREQ宏声明本文档需要的autoconf版本。
3、AC_INIT宏用来定义软件的名称和版本等信息,这里的BUG-REPORT-ADDRESS能够省略。
4、AC_CONFIG_SRCDIR宏用来侦测所指定的源码文档是否存在,来确定源码目录的有效性。这个参数一般无需修改。
5、AC_CONFIG_HEADER宏用于生成config.h文档,以便autoheader使用。
修改时需要增加一个宏AM_INIT_AUTOMAKE(PACKAGE,VERSION),还要把AC_CONFIG_HEADER更改为
AM_CONFIG_HEADER。
具体如下所示:
# -*- Autoconf -*-
# Process this file with autoconf to produce a configure script.
AC_PREREQ(2.57)
AC_INIT(FULL-PACKAGE-NAME, VERSION, BUG-REPORT-ADDRESS)
AC_CONFIG_SRCDIR([main.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
修改后如下:
# -*- Autoconf -*-
# Process this file with autoconf to produce a configure script.
AC_PREREQ(2.57)
#AC_INIT(FULL-PACKAGE-NAME, VERSION, BUG-REPORT-ADDRESS)
AC_INIT(main,1.0)
AM_INIT_AUTOMAKE(main,1.0)
AC_CONFIG_SRCDIR([main.c])
AM_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)

第三步 autoheader
首先把configure.scan更改名称为configure.in。然后执行aclocal,autoconf,autoheader。
#mv configure.scan configure.in
#aclocal /*这边生成alocal.m4 */
#autoconf /* 生成configure.in连同configure的可执行文档 */
#autoheader

第四步 automake
这是很重要的一步。automake需要的脚本配置文档是Makefile.am,这个文档需要自己建立。
AUTOMAKE_OPTIONS为配置automake的选项。automake提供了3种软件等级:foreign、gnu、gnits,让用户选择使用,默认等级是gnu。现在使用的foreign只是检测必要的文档。
bin_PROGRAMS定义了要产生的执行文档名。假如产生多个可执行文档,每个文档名用空格隔开。
file_SOURCES定义file这个执行程式的依赖文档。同样的,对于多个执行文档,那就要定义相应的file_SOURCES。
接下来就是使用automake对其生成configure.in文档。这里能够使用选项–adding-missing让automake自动添加一些必要的脚本文档。

第五步 运行configure
这样就完成了Makefile的制作。

p2
(注释:在运行configure的时候,我们能够对configure的相关宏参数进行配置,已达到我们的目的。
我们现在编写的程式希望能够在ARM平台上使用,所以这就涉及到交叉编译的问题,在configure的时候我们就能够来指定交叉编译器,如下
#./configure CC=/usr/local/arm/3.4.1/bin/arm-linux-gcc –host=arm –target=arm
用户能够通过给configure传递命令行参数而指定系统类型。在交叉编译时必须这样作。在大多数交叉编译的复杂情况下,要涉及到三种系统类型。用于指 定他们的选项是: –build=build-type 对包进行配置和编译的系统类型(很少用到); –host=host-type 包将运行的系统 类型; –target=target-type 包中任何编译器将生成的代码的系统类型。

p3
这是具备的功能:make、make install、make uninstall、make clean、make
distclean、make dist。
1、键入make默认执行make all。其目标体为all。
2、make install(uninstall)
3、make clean (distclean)
make clean仅仅是清除之前编译的可执行文档及配置文档。而make distclean要清除任何生成的文档。
4、make dist
将任何的程式和相关的文档打包为一个压缩文档以供发布

本文转自:http://idcnews.net/html/edu/20070101/291964.html

  评论这张
 
阅读(1086)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018