automake的使用和注意事项(错误分析)
来源:互联网 发布:淘宝推广方式论文 编辑:程序博客网 时间:2024/06/07 14:40
今天下午搞了一个下午,终于算是会用一点automake了,在这里写下来,防止以后犯下同样的错误。
先贴一篇别人写的使用步骤,我是按照这个步骤来的,但是却出现了不少意想不到的错误啊!
这篇文章大部分是从网上找到了,但是原作者在几个关键的点上(可能是菜鸟才会犯的错误吧),没有指出来,我这篇文章,算一个补充吧!
我在下面标出了最容易出错的地方,希望后来的人少走点弯路啊,也给自己做个备忘!
======================准备工作=================================
在开始使用autoconf和automake之前,首先确认你的系统安装有GNU的如下软件:
1. automake
2. autoconf
3. m4
4. perl
5. 如果你需要产生共享库(shared library)则还需要GNU Libtool
介绍方法之前大家看一下下面这个图,先记下autoconf和automake工作的几个步骤:
=====================步骤简介================================
步骤解释如下:
1、由你的源文件通过autoscan命令生成configure.scan文件,然后修改configure.scan文件并重命名为configure.in
2、由aclocal命令生成aclocal.m4
3、由autoconf命令生成configure
4、编辑一个Makefile.am文件并由automake命令生成Makefile.in文件
5、运行configure命令生成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、
进入hello目录,运行autoscan命令,命令如下:
>cd hello
>autoscan
2、这步很重要 configure.in 主要是用来检测系统的环境
ls会发现多了一个configure.scan文件。修改此文件,
在AC_INIT宏之后加入
AM_INIT_AUTOMAKE (hello, 1.0,lvhongya2008@126.com),这里hello是你的软件名称,1.0是版本号,第三个是联系方式即你的这些 源程序编译将生成一个软件hello-1.0版。
然后把 configure.scan文件的最后一行
AC_OUTPUT宏填写完整变成AC_OUTPUT(Makefile),这个不一定非要这样写,还有一种是这个样子AC_CONFIG_FILES([Makefile])
AC_OUTPUT
但是AC_OUTPUT这个宏也是必须的
表明autoconf和 automake最终将生成
Makefile文件。最后把configure.scan文件改名为configure.in。最终 configure.in文件
内容如下:#dnl Process this file with autoconf to produce a configure script.AC_INIT(hello, 1.0,lvhongya2008@126.com) #这个宏是必须的AM_INIT_AUTOMAKE(hello, 1.0) #一定注意这个顺序不能变啊#dnl Checks for programs.AC_PROG_CC#dnl Checks for libraries.#dnl Checks for header files.#dnl Checks for typedefs, structures, and compiler characteristics.#dnl Checks for library functions.AC_OUTPUT(Makefile) #还有一种是这个样子#AC_CONFIG_FILES([Makefile])#AC_OUTPUT如果上面红色字体部分的顺序改变的话(我就这样搞了一个下午)
就会在生成的configure中出现大量的错误提示:主要是说以as_fn_开头的大量的命令未找到,看的我心拔凉啊!
3、>aclocal
会发现多了一个aclocal.m4文件。
4、>autoconf
将发现生成了一个可执行的configure命令。
5、Makefile.am 主要是用来确定你自己程序的依赖关系
编辑一个Makefile.am文件,文件内容如下:
AUTOMAKE_OPTIONS=foreignbin_PROGRAMS=hellohello_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.cinterface/interface.h #这里的_SOURCES 是关键字 ,源文件列表可以通过find命令自己生成#hello_LDADD = #可执行文件main连接时需要的库文件(.so .a)#hello_LDFLAGS = -lpthread #这个是依赖的系统库#AM_CFLAGS=-D_LINUX #传递给编译器 预编译宏,和选项#INCLUDES=-I/usr/include/ # 传递给编译器的头文件路径。这表明你最后将通过一个make命令利用上述hello_SOURCES源文件生成一个hello的程序。
6、>automake --add-missing
屏幕提示如下:
automake: configure.in: installing `./install-sh'
automake: configure.in: installing `./mkinstalldirs'
automake: configure.in: installing `./missing'在这个地方有可能会提示config.h.in未找到,先运行一下autoheader,再运行automake --add-missing 就OK了。
如果你用的是windows+vmware,还有可能出这个错http://blog.csdn.net/lvhongya/article/details/6612170
7、
然后你可以运行之前生成的configure命令来生成一个Makefile文件,输入./configure命令即可。
8、
编辑Makefile文件,找到$(LINK)所在的那一行,本来生成的文件内容如下:
@rm -f hello
$(LINK) $(hello_LDFLAGS) $(hello_OBJECTS) $(hello_LDADD) $(LIBS)
在这两行之间增加几行变成:
@rm -f hello
@mv -f comm.o comm
@mv -f tools.o tools
@mv -f db.o db
@mv -f network.o network
@mv -f interface.o interface
$(LINK) $(hello_LDFLAGS) $(hello_OBJECTS) $(hello_LDADD) $(LIBS)
这是因为默认生成的Makefile将在编译后把所有目标文件置于当前目录,而在进行链接
(link)时又会到各个子目录去找相应的目标文件。
当然,为了完整,建议各位在clean部分加上如下一些行:
@rm -f comm/comm.o
@rm -f tools/tools.o
@rm -f db/db.o
@rm -f network/network.o
@rm -f interface/interface.o
好了,经过上述这些步骤后,现在你可以来编译生成你自己的可执行程序了。输入一个make
all吧,然后就可以运行./hello来看你的程序运行了。
运用autoconf和automake的最大好处是,你的程序以源程序方式发布后,其它所有人只需要
依次输入
./configure
make
make install
命令就可以把你的程序安装在自己的电脑上运行了。所有符合GNU标准的UNIX/Linux都不需
要再修改Makefile里的任何字符。
原文地址:http://www.newsmth.net/pc/pccon.php?id=6109&nid=200148-
- automake的使用和注意事项(错误分析)
- 使用Automake和Autoconf生成Makefile (没有错误的例子)
- EventBus的使用,注意事项,错误分析
- Autoconf和automake的使用
- autoconf和automake的使用
- automake 和autoconf的使用
- autoconfig和automake的使用
- autoconf和automake的安装与使用
- Linux系统--autoconf和automake的使用
- linux下autoconf和automake的使用
- linux下autoconf和automake的使用
- automake的flat和shadow详细使用
- autoconf和automake的使用教程
- automake 的使用
- automake的使用
- autoconf 和automake使用示例
- AUTOCONF 和AUTOmake使用详解
- 从kernel源代码的角度分析signal的错误用法和注意事项
- iphone上关闭模拟键盘
- CE基本的音视频同步方法
- 彻底明白了Date(日期)Calendar(日历)GregorianCalendar(标准阳历)
- ZOJ 2833
- LDD3学习笔记(19):块驱动
- automake的使用和注意事项(错误分析)
- VMWare的三种工作模式
- hdu 2544 最短路 (dijkstra/floyd/spfa)
- Spring基础和总结
- oracle的Listener启动不了的解决方案
- C#连接MYSQL,MySQLDriver.dll 有BUG,不要用!
- FreeBSD学习(一)
- DBHelper 代码
- POJ 1426