博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Linux下使用autotools生成Makefile
阅读量:6830 次
发布时间:2019-06-26

本文共 1993 字,大约阅读时间需要 6 分钟。

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

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

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

autoscan

aclocal

autoconf

autoheader

automake

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

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

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

该图片中修改了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可执行文件。

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

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

例Makefile.am如下:

其中的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分区下就没问题了

参考:

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

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

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

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

11. 输入./hello指令

其他的一些用法:

12. make clean

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

13. make dist

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

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

 

参考来自:

转载于:https://www.cnblogs.com/KlausFeng/p/3877653.html

你可能感兴趣的文章
《Effective C#》读书笔记——条目4:使用Conditional特性而不是#if条件编译<C#语言习惯>...
查看>>
浅谈异常与恋爱
查看>>
分享:http-watcher更新,改进对动态web程序的支持
查看>>
设计模式---->经典设计模式一览
查看>>
Asp.Net生命周期系列一
查看>>
Spark源码分析 – Deploy
查看>>
C#反射技术概念作用和要点
查看>>
翻译器DIY————次序
查看>>
easyui form 提交问题,纠结了很久,有点诡异
查看>>
Swift - 图像控件(UIImageView)的用法
查看>>
Cloneable接口和Object的clone()方法
查看>>
[saiku] 连接 mondrain 数据源出错-空指针错误
查看>>
人大、上财、复旦、上交四校2013年应届金融硕士就业去向
查看>>
技能UP:SAP OBYC自动记账的实例说明(含value String应用说明)
查看>>
[转]【HTTP】Fiddler(二) - 使用Fiddler做抓包分析
查看>>
Cts框架解析(8)-IBuildProvider
查看>>
asp.net mvc 之旅—— 第三站 路由模板中强大的自定义IRouteConstraint约束
查看>>
[TypeScript] Understanding Decorators
查看>>
解决Matlab画图直接保存.eps格式而导致图不全的问题
查看>>
BZOJ 3339: Rmq Problem 莫队算法
查看>>