linux--Autotools

  • 1 介绍
    • Automake
    • Gnulib
    • Libtool
  • 2 步骤
    • cmake的步骤
  • 3 Autotools发展史 引[Autotools发展史](https://www.homedt.net/16685.html)
    • 手写makefile时代
    • Autoconf时代
    • automake时代
    • libtool时代
  • 参考

1 介绍

Autoconf是一个用于生成shell脚本的工具,可以自动配置软件源代码以适应多种类似POSIX的系统。为了让你的软件包在所有的不同系统上都可以进行编译。Autotools主要有Autoconf、automake、libtool等软件包工具组成,我们可以称为Autotools三剑客。
本质是产生makefile文件的工具。
cmake产生的晚,解决了很多autotools工具的问题。autotools是一个工具集具有强大的灵活性,但是因为步骤太多,配置繁琐,产生了很多的替代方案,cmake是其中最优秀的之一。

Automake

为了兼容各个系统的make使用。
从Makefile.am文件和Autoconf一起生成Makefile.in文件。

Gnulib

这是GNU代码的中央仓库,目的是共享免费的软件包。它的共享是源码级别的,只需要从上面直接拉取到自己的源码树。

Libtool

生产动态的共享库是非常困难的事情,每个系统都有自己的编译工具、编译标志、etc.。
Libtool会处理所有的共享库请求。需要共享库的时候会自Libtool会自动地被使用,无需知晓其语法规则。

2 步骤

1.运行autoscan命令
2.将configure.scan 文件重命名为configure.in,并修改configure.in文件
3.在project目录下新建Makefile.am文件,并在core和shell目录下也新建makefile.am文件
4.在project目录下新建NEWS、 README、 ChangeLog 、AUTHORS文件
5.将/usr/share/automake-1.X/目录下的depcomp和complie文件拷贝到本目录下
6.运行aclocal命令
7.运行autoconf命令
8.运行automake -a命令
9.运行./confiugre脚本

cmake的步骤

1.编写CMakeLists.txt
2.运行cmake命令

3 Autotools发展史 引Autotools发展史

Makefile语法复杂、难以维护。对于一个小项目还好,对于大型的项目和开源项目,现在流行使用一些工具自动生成Makefile,可以大大减轻软件开发人员的负担。
比较常见的工具有GNU Autotools、CMake、QMake、SCons、Ant等。

手写makefile时代

早期我们在Unix、linux环境下开发软件,makefile都是手写的

Autoconf时代

后来linux操作系统问世,后续的版本也越来越多,各种发布版本错综复杂,差异越来越大,甚至包括操作系统的接口都出现差异。这时候别说makefile能不能正确编译的问题了,就连我们编写的应用程序,即使编译正确,也有可能在其它的平台上运行不起来。这个问题,大家都知道,后来出现了POSIX API标准,就是可移植的操作系统接口。对于makefile来说,为了适配操作系统的更多版本,只能不断地添加代码,这就导致configure脚本越来远大,导致后来开发人员再也受不了了,维护成本越来越高。
1991年,David Mackenzie开发了Autoconf工具,用来自动生成configure脚本
用户只需要定义几个宏,表示我们关心的配置选项,保存在configure.ac文件里,然后使用Autoconf工具就可以帮我们自动生成configure脚本了!

automake时代

然而,随着项目越来越大,makefile也越来越复杂,尤其是大型项目,手写越来越困难,怎么办?
automake工具这个时候闪亮登场了!
对于开发人员来说,我们关心的就是这个项目要生成什么可执行文件,需要编译哪些源文件,至于怎么编译的?底层的链接细节,鬼才懒得管。
后来,为了进一步减少工作量,又出现一个aclocal工具,会自动将automake、autoconf以及用户定义的所有宏统统放在aclocal.m4文件里。
为什么要保存在aclocal.m4这种格式的文件里?我也不知道…,m4,macro宏后面4个字母,缩写就是m4.

libtool时代

随着Unix、Linux之间的差异越来越大,对动态共享库的管理差异也越来越大,比如有些共享库,使用.so格式,有的是.a,有的是.o的形式。运行时对动态库的管理方式也一样,有的操作系统支持动态加载,有的就不支持。这就对我们Makefile带来了挑战。怎么办?libtool的工具出现就是为了解决这个问题的,它通过对生成的动态库进行抽象,统一生成.la的形式,可以支持十几种各种不同的平台。

参考

1、官方autoconf
2、Autoconf简介
3、cmake与autoconf+automake的对比
4、Autotools
5、在Linux操作系统下自动生成Makefile的方法
6、autotools简介0
7、Autotools发展史
8、autoconf介绍1

linux--Autotools相关推荐

  1. autotools归纳

    最近接触到许多linux项目,其编译都是使用的autotools. autotools是一个自动化的编译工具.个人理解它的最主要功能就是生成Makefile. 因为直接写Makefiel,其依赖关系还 ...

  2. Ubuntu16.04搭建OpenGrok环境

    搭建的目标平台系统版本: Ubuntu 16.04.2 LTS  . 本方法对其它ubuntu版本同样适用. 准备以下Tools: apache-tomcat-9.0.8(https://tomcat ...

  3. Linux下autoTools工具集使用介绍

    Author : iStone E-mail : liul.stone@gmail.com Date : 2015-09-19 15:16:38 一 使用autoTools工具集 1.1 什么是aut ...

  4. Linux Test Project 测试套件说明

    LTP(Linux Test Project) Linux Test Project 是由SGI.OSDL和Bull开发和维护的一个项目,由IBM.思科.富士通.SUSE.Red Hat.Oracle ...

  5. Android Linux内核编译调试

    对于在Windows上写代码写习惯的人,调试是必不可少的手段,但是转到Android以后,发现调试手段异常简陋,跟Windows简直不是一个级别,特别是Android的内核调试,网上资料也相对较少,不 ...

  6. ALSA(二), makefile, Autotools, premake

    http://antkillerfarm.github.io/ 从Gstreamer到ALSA(续) 4.SOC_SINGLE类宏 这里对SOC_SINGLE类的宏,详细说明一下,因为只有这些宏才是真 ...

  7. Linux程序设计实验项目六,《linux程序设计》实验教学大纲

    <linux程序设计>实验教学大纲 课程名称:Linux程序设计 课程编号:408412420408436407 适用专业:计算机科学与技术网络工程软件工程 总 学 分:3 总 学 时:4 ...

  8. 如何使用autotools工具

    autotools是系列工具,读者首先要确认系统是否装了以下工具(可以用which命令进行查看). autoscan aclocal autoheader automake autoconf 使用au ...

  9. autotools使用

    Makefile固然可以帮助make完成它的使命,但要承认的是,编写Makefile确实不是一件轻松的事,尤其对于一个较大的项目而言更是如此.那么,有没有一种轻松的手段生成Makefile而同时又能让 ...

  10. 使用Linux auto Makefile自动生成的运行步骤

    首先创建一个 Linux Makefile.am.这一步是创建Linux Makefile很重要的一步,automake要用的脚本配置文件是Linux Makefile.am,用户需要自己创建相应的文 ...

最新文章

  1. java域对象_javaWeb域对象
  2. android cookie保存,android本地保存Cookie和还原到cookiestore
  3. Java中MySQL事务处理举例
  4. 通俗理解决策树算法中信息增益的
  5. Mybatis-Plus驼峰命名规则之Date类型字段返回值为null
  6. c++ string 末尾追加char字符
  7. 乐山计算机学校新歌王,星歌王第二季乐山市计算机学校专场赛决赛完美落幕!...
  8. Druid 在小米公司部分技术实践
  9. android的环境搭建与配置
  10. [2018.10.10 T1] 餐馆
  11. jupyter in vscode python语法不高亮 单元格语言格式CVE
  12. 【你好,windows】windows7 x64x86旗舰完整版(带驱动包usb3.0_nvme)2020.1.22
  13. Unity如何免费持续获取卫星云图、雷达云图等天气数据图片,制作动态天气应用
  14. matlab指派问题求法,matlab指派问题
  15. Python数据处理Tips数据重复值处理常用方法
  16. 21世纪十大营销法则
  17. 部署项目 Failure obtaining db row lock: Table ‘XXX.qrtz_LOCKS‘ doesn‘t exist
  18. codewars----Exes and Ohs
  19. 如何备份 WordPress 数据库
  20. e4a数据库mysql中间件_[e4a同步内陆数据库至mysql]?确立一个中间件毗邻数据库

热门文章

  1. 计算机网络--基础通信概念
  2. 漫话:什么是 “设计模式” ?
  3. 列表标签,自定义列表,img标签,超链接a标签
  4. 养老机构管理系统的设计与实现
  5. git 新建分支并切换到该分支_git分支的创建、删除、切换、合并
  6. Apache Kylin 和 Baidu Palo对比
  7. 福美来轿车遥控钥匙匹配方法 转载
  8. 从IClassFactory为CLSID为{AA40D1D6-CAEF-4A56-B9BB-D0D3DC976BA2}的COM组件创建实例失败,原因是出现以下错误:c001f011
  9. 《上帝掷骰子吗:量子物理史话》读后感
  10. 随机森林【机器学习笔记简摘】