linux--Autotools
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时代
早期我们在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相关推荐
- autotools归纳
最近接触到许多linux项目,其编译都是使用的autotools. autotools是一个自动化的编译工具.个人理解它的最主要功能就是生成Makefile. 因为直接写Makefiel,其依赖关系还 ...
- Ubuntu16.04搭建OpenGrok环境
搭建的目标平台系统版本: Ubuntu 16.04.2 LTS . 本方法对其它ubuntu版本同样适用. 准备以下Tools: apache-tomcat-9.0.8(https://tomcat ...
- Linux下autoTools工具集使用介绍
Author : iStone E-mail : liul.stone@gmail.com Date : 2015-09-19 15:16:38 一 使用autoTools工具集 1.1 什么是aut ...
- Linux Test Project 测试套件说明
LTP(Linux Test Project) Linux Test Project 是由SGI.OSDL和Bull开发和维护的一个项目,由IBM.思科.富士通.SUSE.Red Hat.Oracle ...
- Android Linux内核编译调试
对于在Windows上写代码写习惯的人,调试是必不可少的手段,但是转到Android以后,发现调试手段异常简陋,跟Windows简直不是一个级别,特别是Android的内核调试,网上资料也相对较少,不 ...
- ALSA(二), makefile, Autotools, premake
http://antkillerfarm.github.io/ 从Gstreamer到ALSA(续) 4.SOC_SINGLE类宏 这里对SOC_SINGLE类的宏,详细说明一下,因为只有这些宏才是真 ...
- Linux程序设计实验项目六,《linux程序设计》实验教学大纲
<linux程序设计>实验教学大纲 课程名称:Linux程序设计 课程编号:408412420408436407 适用专业:计算机科学与技术网络工程软件工程 总 学 分:3 总 学 时:4 ...
- 如何使用autotools工具
autotools是系列工具,读者首先要确认系统是否装了以下工具(可以用which命令进行查看). autoscan aclocal autoheader automake autoconf 使用au ...
- autotools使用
Makefile固然可以帮助make完成它的使命,但要承认的是,编写Makefile确实不是一件轻松的事,尤其对于一个较大的项目而言更是如此.那么,有没有一种轻松的手段生成Makefile而同时又能让 ...
- 使用Linux auto Makefile自动生成的运行步骤
首先创建一个 Linux Makefile.am.这一步是创建Linux Makefile很重要的一步,automake要用的脚本配置文件是Linux Makefile.am,用户需要自己创建相应的文 ...
最新文章
- java域对象_javaWeb域对象
- android cookie保存,android本地保存Cookie和还原到cookiestore
- Java中MySQL事务处理举例
- 通俗理解决策树算法中信息增益的
- Mybatis-Plus驼峰命名规则之Date类型字段返回值为null
- c++ string 末尾追加char字符
- 乐山计算机学校新歌王,星歌王第二季乐山市计算机学校专场赛决赛完美落幕!...
- Druid 在小米公司部分技术实践
- android的环境搭建与配置
- [2018.10.10 T1] 餐馆
- jupyter in vscode python语法不高亮 单元格语言格式CVE
- 【你好,windows】windows7 x64x86旗舰完整版(带驱动包usb3.0_nvme)2020.1.22
- Unity如何免费持续获取卫星云图、雷达云图等天气数据图片,制作动态天气应用
- matlab指派问题求法,matlab指派问题
- Python数据处理Tips数据重复值处理常用方法
- 21世纪十大营销法则
- 部署项目 Failure obtaining db row lock: Table ‘XXX.qrtz_LOCKS‘ doesn‘t exist
- codewars----Exes and Ohs
- 如何备份 WordPress 数据库
- e4a数据库mysql中间件_[e4a同步内陆数据库至mysql]?确立一个中间件毗邻数据库
热门文章
- 计算机网络--基础通信概念
- 漫话:什么是 “设计模式” ?
- 列表标签,自定义列表,img标签,超链接a标签
- 养老机构管理系统的设计与实现
- git 新建分支并切换到该分支_git分支的创建、删除、切换、合并
- Apache Kylin 和 Baidu Palo对比
- 福美来轿车遥控钥匙匹配方法 转载
- 从IClassFactory为CLSID为{AA40D1D6-CAEF-4A56-B9BB-D0D3DC976BA2}的COM组件创建实例失败,原因是出现以下错误:c001f011
- 《上帝掷骰子吗:量子物理史话》读后感
- 随机森林【机器学习笔记简摘】