首页 > 其他 > 详细

autorun automake简单使用

时间:2014-07-30 00:39:42      阅读:360      评论:0      收藏:0      [点我收藏+]

介绍

对于一个UNIX/Linux下C程序员来说,一个比较麻烦的工作就是写自己的Makefile。可能你有如下经验:写一个简单的C程序,自己多写几行gcc命令就把程序变成可执行的了;写一个稍微复杂点的程序,源文件个数可能在30个左右,还是写一行行的gcc命令就麻烦了,你可能想到写个makefile,你可能也在这样做着;但你某一天会发现你写的这个Makefile可能不是一个所有 UNIX/Linux类操作系统下通用的Makefile,比如某人下载了你的程序去他自己电脑上可能make不了。???

这样,你就有必要了解并学会运用autoconf和automake了。

先简单介绍一下这两个工具:
autoconf:是一个用于生成可以自动地配置软件源代码包以适应多种UNIX类系统的shell脚本的工具。由autoconf生 成的配置脚本在运行的时候不需要用户的手工干预;通常它们甚至不需要手工给出参数以确定系统的类型。相反,它们对软件包可能需要的各种特征进行独立的测 试。在每个测试之前,它们打印一个单行的消息以说明它们正在进行的检测,以使得用户不会因为等待脚本执行完毕而焦躁。因此,它们在混合系统或者从各种常见UNIX变种定制而成的系统中工作的很好。你也省了工作,没必要维护文件以储存由各个UNIX变种、各个发行版本所支持的特征的列表。
automake:是一个从文件Makefile.am自动生成Makefile.in的工具。每个Makefile.am基本上是一系列make的宏定义(make规则也会偶尔出现)生成的Makefile.in,服从GNU Makefile标准。为了生成Makefile.in,automake需要perl。但是由automake创建的发布完全服从GNU标准,并且在创建中不需要perl。

????快速使用说明

在本文中,我将结合最近的实践经历以及遇到的问题,给大家介绍如何使用autoconf和automake两个工具来帮助我们自动地生成符合自由软件惯例的Makefile,这样就可以象常见的GNU程序一样,只要使用"./configure","make","make instal"就可以把程序安装到Linux系统中去了。

* 在开始使用autoconf和automake之前,首先确认你的系统安装有GNU的如下软件:
??? 1. automake
??? 2. autoconf
??? 3. m4
??? 4. perl
??? 5. 如果你需要产生共享库(shared library)则还需要GNU Libtool。

??? ?

* 介绍方法之前,大家先记下autoconf和automake工作的几个步骤,步骤解释如下:?????????????????

1、由你的源文件通过autoscanf命令生成configure.scan文件,然后修改

configure.scan文件并重命名为configure.in
??? 2、由aclocal命令生成aclocal.m4
??? 3、由autoconf命令生成configure

?

注:很重要

如果这里紧接着直接进行第4步:

automake --add-missing:后会出现错误:configure.in:8:required file

?? `./config.h.in‘ not found

紧接着./configure后会出现 config.status: error: cannot find input file:

config.h

解决办法:在automake --add-missing之前执行autoheader就ok了,一般网上的资料

很少有人提到这一步,大家也都是转来转去,所有会导致错误的发生。


??? 4、编辑一个Makefile.am文件并由automake(automake --add-missing)命令生成

?? Makefile.in文件
??? 5、./configure命令生成Makefile??? (后面有命令介绍)

????? ?

实战

我的源程序结构如下:总共两个目录:viaencode/ 、videolib/,
viaencode/下有两个源文件和一个makefile.am文件: encodeapi.c?? 、viaenc.c 、 Makefile.am
videolib/下有四个头文件: MP4EncApi.h、hw_lib.h、ViaApi.h 、itu.h,以及六个.a库文件:libext_device_ctrl.a 、libhwdec.a、libhwenc.a、libitu.a、libuserdev.a、libvia.a。生成目标程序viaenc要下载到开板中运行。


??? 按照如下步骤来自动生成Makefile吧:
1、进入viaencode/目录,运行autoscan命令,命令如下:
# cd viaencode/
# autoscan
2、ls会发现多了一个configure.scan文件。修改此文件,在AC_INIT宏之后加入AM_INIT_AUTOMAKE(viaenc, 1.0),这里hello是你的软件名称,1.0是版本号,即你的这些源程序编译将生成一个软件viaenc-1.0版。"然后把 configure.scan文件的最后一行AC_OUTPUT宏填写完整变成AC_OUTPUT(Makefile),表明autoconf和 automake最终将生成Makefile文件",这样的话会出错,因为之前有一句AC_CONFIG_FILES([Makefile]),所以我没变。最后把configure.scan文件改名为configure.in
3、运行aclocal命令,ls会发现多了一个aclocal.m4文件。
4、然后运行autoconf命令,ls将发现生成了一个可执行的configure命令。

5、执行autoheader,前面已讲过。

6、编辑一个Makefile.am文件,已有,文件内容如下:
??? bin_PROGRAMS = viaenc
??? viaenc_SOURCES = viaenc.c encodeapi.c
??? AM_CFLAGS = -I../videolib
??? LDADD = -L../videolib -lvia -litu -lhwdec -lext_device_ctrl -lhwenc -???? lpthread -luserdev

7、运行automake --add-missing命令。屏幕提示如下:
automake: configure.in: installing `./install-sh‘
automake: configure.in: installing `./mkinstalldirs‘
automake: configure.in: installing `./missing‘
8、运行configure命令来生成一个Makefile文件,输入./configure命令即可???????? 9、因为应用程序是要下载到开发版中运行,所以必须修改交叉编译工具。修改Makefile中的CC = gcc,改为指向自己的交叉编译工具,CC=/usr/local/arm/gcc-3.4.4-glibc-2.3.6/bin/arm-linux-gcc。否则会出错!!!??

运用autoconf和automake的最大好处是,你的程序以源程序方式发布后,其它所有人只需要依次输入./configure ,make,make install命令就可以把你的程序安装在自己的电脑上运行了。所有符合GNU标准的UNIX/Linux都不需要再修改Makefile里的任何字符。

?

总的来说,程序开发人员只需要写一些简单的含有预定义宏的文件,由autoconf根据一个宏文件生成configure,由automake根据另一个宏文件生成Makefile.in, 再使用configure依据Makefile.in来生成一个符合惯例的Makefile。

?

10、经过上述这些步骤后,输入一个make即可生成目标程序viaenc,然后就可以运行./viaenc使你的程序运行了。

?

大体流程回顾

Source --autoscan--> configure.scan

?

Configure.scan --手动修改--> sconfigure.in

?

--Aclocal-->aclocal.m4

?

Aclocal.m4 + configure.in -–autoconf--> configure

?

--Autoheader-->

?

--手动编写--> Makefile.am

?

Makefile.am --automake--> makefile.in

?

makefile.in --./configure--> makefile

?

?

autorun automake简单使用,布布扣,bubuko.com

autorun automake简单使用

原文:http://www.cnblogs.com/jintianfree/p/3876612.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!