Linux下使用autotools生成Makefile

使用环境:Vmware下虚拟机CentOS 6.5

参考华清远见教程中的说明并且亲自手动尝试下,遇到了不少问题。运行一个简单的hello world程序,下面是一步步尝试步骤:

1. 确认系统是否安装一下工具(使用which命令查看)

autoscan

aclocal

autoconf

autoheader

automake

使用autotools主要是利用各个工具的脚本文件以生成最后的Makefile。流程图如下:

autotools

2. 使用autoscan,它会在给定目录及其子目录树中检查源文件,若没有给出目录,就在当前目录及其子目录树中进行检查。它将会搜索源文件以寻找一般的移植性问题并创建一个文件“configure.scan”,该文件就是接下来autoconf要用到的“configure.in”原型。

1

3. 改写configure.scan文件,改好后并将其重新命名为configure.in,改好后如下图所示:

image

该图片中修改了AC_INIT()为AC_INIT(hello,1.0)

添加了AM_INIT_AUTOMAKE(hello,1.0)和AC_CONFIG_FILES([Makefile])

AC_PREREQ宏声明本文件要求的autoconf版本,教程中使用的版本2.59,而我的Linux下为2.63。

4. 使用aclocal,生成aclocal.m4文件,该文件主要处理本地的宏定义。

5. 使用autoconf,生成configure可执行文件。

2

6. 使用autoheader,生成config.h.in文件

3

7. 编写Makefile.am文件,用户需要自己创建相应的文件,之后使用automake工具转换成Makefile.in。

例Makefile.am如下:

4

其中的AUTOMAKE_OPTIONS为设置automake的选项。由于GNU对自己发布的软件有严格的规范,比如必须附带许可证声明文件COPYING等,否则automake执行时会报错。automake提供了3种等级:foreign,gnu,gnits,让用户选择采用,默认等级为gnu,foreign等级它只检测必须的文件

bin_PROGRAMS定义要产生的执行文件名,如果要产生多个执行文件,每个文件名用空格隔开

bin_SOURCES定义hello这个执行程序所需要的原始程序,如果hello这个程序是由多个文件所产生的,则必须把它所用到的所有原始文件都列出来,并用空格隔开,例如:hello需要hello.c,sunq.c,hello.h三个依赖文件,则定义hello_SOURCES=hello.c sunq.c hello.h。需要注意的是,如果要定义多个执行文件,则对每个执行程序都要定义相应的file_SOURCES

8. 使用automake生成“configure.in”文件,这里使用选项“--adding-missing”,可以让automake自动添加一些必须的脚本文件。

[Niklaus@localhost hello]$ automake --add-missing

结果出现如下错误:

configure.ac:6: installing `./install-sh'; error while making link: 不允许的操作
configure.ac:6: installing `./missing'; error while making link: 不允许的操作
src/Makefile.am: installing `./depcomp'; error while making link: 不允许的操作

上网查询后发现,原来是因为把工程发在Linux和windows的共享目录下,也就是NTFS分区,把该目录移动到LInux下的ext3分区下就没问题了

参考:http://www.cppblog.com/izualzhy/archive/2012/06/28/180677.html?opt=admin

9. 解决上面问题后重新运行以上步骤后,再运行configure。输入./configure。

就把Makefile.in文件变成了Makefile。

5

10. 运行make指令,或者运行make install

6

这样就编译成功生成hello执行文件

11. 输入./hello指令

7

其他的一些用法:

12. make clean

8

此时,make会清除之前所编译的可执行文件及目标文件(object file, *.o)

13. make dist

此时,make将程序和相关的文档打包为一个压缩文档以供发布,如下所示:

9

由上面的讲述不难看出,autotools确实是软件维护与发布的必备工具,也鉴于此,如今GUN的软件一般都是由automake来制作的。

 

参考来自:

http://blog.sina.com.cn/s/blog_4b5210840100c0ta.html

http://blog.csdn.net/vividonly/article/details/6248811

posted on 2014-07-30 11:42  KlausFeng  阅读(1297)  评论(0编辑  收藏  举报