目录

生成configure过程中各文件之间的关系图

详细介绍

准备工作:

三、实例

2.操作步骤

(1)安装依赖的包

(2)autoscan

(3)aclocal

(3)autoconf

(4)autoheader

(5)Makefile.am

(6)automake

(7)测试

(7)打包


生成configure过程中各文件之间的关系图

详细介绍

autoscan: 扫描源代码以搜寻普通的可移植性问题,比如检查编译器,库,头文件等,生成文件configure.scan,它是configure.ac的一个雏形。

aclocal:根据已经安装的宏,用户定义宏和acinclude.m4文件中的宏将configure.ac文件所需要的宏集中定义到文件 aclocal.m4中。aclocal是一个perl 脚本程序,它的定义是:“aclocal - create aclocal.m4 by scanning configure.ac”

automake:将Makefile.am中定义的结构建立Makefile.in,然后configure脚本将生成的Makefile.in文件转换 为Makefile。如果在configure.ac中定义了一些特殊的宏,比如AC_PROG_LIBTOOL,它会调用libtoolize,否则它 会自己产生config.guess和config.sub

autoconf:将configure.ac中的宏展开,生成configure脚本。这个过程可能要用到aclocal.m4中定义的宏。

准备工作:

安装autoscan,

sudo apt-get install automake

三、实例

我的文件是c++文件,这里创建一个hello.cpp文件,里面的内容如下:

#include <iostream>using namespace std;int main()
{cout<<"hello word"<<endl;return 0;
}

2.操作步骤

(1)安装依赖的包

ubuntu@ubuntu:~/Documents/project/autotest$ sudo apt-get install automake^Cautomake包括:aclocal、automake等
autoconf包括:autoscan、autoconf等

(2)autoscan

(3)aclocal

将生成的configure.scan修改为configure.ac或configure.in,先修改configure.ac里面的内容,再进行aclocal的执行;

ubuntu@ubuntu:~/Documents/project/autotest$ vim configure.ac

这里尤其要注意下面红色的代码,需要填对

#                                               -*- Autoconf -*-
# Process this file with autoconf to produce a configure script.
AC_PREREQ([2.69])
AC_INIT([hello], [1.0], [1583769112@qq.com])
AM_INIT_AUTOMAKE(hello,1.0)
AC_CONFIG_SRCDIR([hello.cpp])
AC_CONFIG_HEADERS([config.h])

# Checks for programs.
AC_PROG_CXX

# Checks for libraries.

# Checks for header files.

# Checks for typedefs, structures, and compiler characteristics.

# Checks for library functions.

AC_OUTPUT(Makefile)

下面就是执行aclocal

ubuntu@ubuntu:~/Documents/project/autotest$ aclocal

下面详细介绍 configure.ac 文件的参数的意义

(3)autoconf

此时可以看到已经生成了configure

(4)autoheader

autoheader生成了configure.h.in如果在configure.ac中定义了AC_CONFIG_HEADER,那么此文件就需要;

(5)Makefile.am

这里主要是修改Makefile.am文件

ubuntu@ubuntu:~/Documents/project/autotest$ vim Makefile.am
ubuntu@ubuntu:~/Documents/project/autotest$ cat Makefile.am
AUTOMAKE_OPTIONS=foreign
bin_PROGRAMS=hello
hello_SOURCES=hello.cpp 

(6)automake

如果linux第一次使用automake这里容易出问题,如下出现了下面的问题:

configure.ac:7: installing './install-sh'
configure.ac:7: installing './missing'

 

其实这个通过这个命令automake --add-missing已经安装了,但是把错误打印了,给我们的感觉是还是有错误,此时只需要在执行一遍该命令即可。

此步主要是为了生成Makefile.in,加上--add-missing参数后,会补全缺少的脚本;

(7)测试

ubuntu@ubuntu:~/Documents/project/autotest$  ./configure
ubuntu@ubuntu:~/Documents/project/autotest$  make
ubuntu@ubuntu:~/Documents/project/autotest$  ./hello

和平时安装许多开源软件一样操作

(7)打包

ubuntu@ubuntu:~/Documents/project/autotest$ make dist

执行后会发现一个安装包,这时候发给别人,解压编译即可运行了。

linux使用---automake学习(从原理到实践,一步步完成automake)相关推荐

  1. 从原理到实践手动拼凑一个Linux系统

    从原理到实践手动拼凑一个Linux系统 转载于:https://blog.51cto.com/suninger123/1371464

  2. python原理书籍_python书籍推荐:《深入浅出深度学习:原理剖析与Python实践》

    在过去的这十年,深度学习已经席卷了整个科技界和工业界,2016年谷歌阿尔法狗打败围棋世界冠军李世石,更是使其成为备受瞩目的技术焦点. 今日,小编就为大家推荐一本能让初学者和"老司机" ...

  3. 好书荐读:阿里达摩院算法专家领衔《深度学习与图像识别:原理与实践》

    点上方蓝字计算机视觉联盟获取更多干货 在右上方 ··· 设为星标 ★,与你不见不散 编辑:Sophia计算机视觉联盟  报道  | 公众号 CVLianMeng 这本书现在当当新书榜排名前三 既然为大 ...

  4. linux设备驱动程序架构的研究,Linux设备驱动程序学习(12)-Linux设备模型(底层原理简介)...

    Linux设备驱动程序学习(12) -Linux设备模型(底层原理简介) 以<LDD3>的说法:Linux设备模型这部分内容可以认为是高级教材,对于多数程序作者来说是不必要的.但是我个人认 ...

  5. 《浏览器工作原理与实践》学习笔记

    浏览器原理 前言 本文是学习李兵老师的<浏览器工作原理与实践>过程中记录笔记,详细链接见文末 进程vs线程 进程:一个应用程序的运行实例就是一个进程,详细来说就是:启动一个应用程序的时候, ...

  6. Linux 快照 (snapshot) 原理与实践(二) 快照功能实践

    文章目录 0. 概要 1. 准备演示数据 2. 创建 snapshot-origin 目标 3. 创建 snapshot 目标 4. 验证 COW 操作 4.1 第一次写数据 4.2 第二次写数据 5 ...

  7. Apollo星火计划学习笔记——Apollo开放空间规划算法原理与实践

    文章目录 前言 1. 开放空间规划算法总体介绍 1.1 Task: OPEN_SPACE_ROI_DECIDER 1.2 Task: OPEN_SPACE_TRAJECTORY_PROVIDER 1. ...

  8. 视频教程-基于深度学习的计算机视觉:原理与实践(上部)-计算机视觉

    基于深度学习的计算机视觉:原理与实践(上部) 大学教授,美国归国博士.博士生导师:人工智能公司专家顾问:长期从事人工智能.物联网.大数据研究:已发表学术论文100多篇,授权发明专利10多项 白勇 ¥1 ...

  9. 基于深度学习的计算机视觉:原理与实践

    基于深度学习的计算机视觉:原理与实践(上部) 基于深度学习的计算机视觉:原理与实践(下部) 本课程适合具有一定深度学习基础,希望发展为深度学习之计算机视觉方向的算法工程师和研发人员的同学们. 基于深度 ...

最新文章

  1. dev应用程序在其他电脑不能运行
  2. 网络:HTTP1.1和HTTP2区别
  3. 让人深思......
  4. HTTP1.1中CHUNKED编码解析(转载)
  5. 有关VIM的一些笔记
  6. hdu 5119 (类似于划分数的状态定义) (DP中的计数问题)
  7. 【同行说技术】Python开发、调试、爬虫类工具大全
  8. Android studio : 模拟器 真机 运行失败(mac电脑)
  9. struts2 与 spring 整合
  10. MapXtreme 2005学习(1):创建临时图层
  11. thinkpad指纹识别linux,在Ubuntu下启用ThinkPad X250的指纹识别
  12. web前端开发工程师-面试题汇总
  13. 专利审查意见通知书中对比文件对应字母X、Y、A、R、P、E代表的含义
  14. Typora修改空格样式(blockquote)
  15. win10计算机联接多个网络,win10两台电脑连接局域网的详细操作教程
  16. 韩非子《五蠹》全文及译文
  17. Dev-cpp 配置新编译器
  18. 威廉•欧奈尔选股七法
  19. 漫画:程序员调bug的真实写照233
  20. 【mysql】关闭mysql缓存的方法

热门文章

  1. 反射学习系列1-反射入门
  2. 深度学习推荐模型-DeepCrossing
  3. 大数据开发笔记(四):Hive数据仓库
  4. 大数据分析平台具备怎样的功能
  5. 玩转CSS盒子之 三角形盒子
  6. java为什么安装怎么慢_Java JDK下载为什么慢? 国内下载站来解决
  7. html选择拖动条,纯CSS做的滑动范围选择条
  8. centos mysql压缩文件直接恢复_CentOS下利用mysqlbinlog恢复MySQL数据库
  9. 因果推断笔记——uplift建模、meta元学习、Class Transformation Method(八)
  10. linux ubuntu系统安装dotnet / Azcopy