linux清除configure文件_在Linux操作系统下自动生成Makefile的方法

在Linux操作系统下进行开发,编写Makefile似乎是不可缺少的事情。但是对于一个比较大的工程,编写一个符合规范的Makefile并非易事。而且由于Makefile的各种显式,隐式规则,加之平时并不经常编写Makefile,导致我们写一个Makefile文件变得更加困难了。

幸好Linux社区有一群非常懒,又非常勤奋得程序员,他们开发了一个可以自动生成Makefile文件得工具,这就是autotools.该工具可以通过扫描源文件,自动生成一个Makefile文件。是不是很神奇!下面是生成Makefile的一个整体流程,我们后面慢慢介绍。

6acee0163c34a95aede0161743fe5956.png

安装autotools

有的系统可能并没有autotools工具,需要手动安装,以Ubuntu为例,可以通过如下命令进行安装:

sudo apt install automake

完成安装之后就可以使用autotools进行下面的流程了。

生成configure.ac文件

首先我们要准备一些源文件,如下图是本文准备的源文件。本文以C++语言开发的程序为例,其中main.cpp是主程序所在文件,而async_network*和storage*分别是网络通信模块和本地存储模块,分别封装了一个C++类来实现具体的功能。本文通过多个文件是为了增加项目的复杂性。源文件的具体内容本文不再赘述,因为这个与内容无关。

a61249399133bcdd48297c92d41715c3.png

完成对源文件创建后,我们就可以通过autoscan命令对该目录进行扫描,生成configure.scan文件。首先切换到该目录,然后执行命令,具体如下:

autoscan

执行成功后可以看出多了两个文件,一个是autoscan.log,这个是日志文件;另外一个是configure.scan文件,这个是扫描的结果文件。

d274711da0f42e48d059c8661ba36c5e.png

这里configure.scan其实是一个模板文件,我们需要手动修改一下其内容,并将其改名为configure.ac。具体需要做:

1) AC_INIT里面的参数: AC_INIT(main,1.0, sunnyzhang@126.com);

2) 添加宏AM_INIT_AUTOMAKE;

3) 在AC_OUTPUT后添加输出文件Makefile。

完成修改后的文件内容如下:

7d167b66292d9ca0633fe8d4af9c3892.png

生成aclocal.m4文件

直接执行aclocal命令即可生成该文件:

aclocal

aclocal.m4是一个宏定义文件,该文件内容的生成依赖于configure.ac文件。aclocal会根据confgure.ac文件的内容,搜索本地的m4文件(通常在类似目录下面/usr/share/aclocal-1.15/),然后生成一个在本目录下面使用的aclocal.m4文件。

生成config.h.in文件

该文件的生成比较简单,直接在命令行执行如下命令即可:

autoheader

这个文件是一个模板文件,后面会利用该文件生成config.h文件。该文件包含一些宏定义。

生成Makefile.in文件

生成Makefile.in文件之前需要首先手动的创建一个Makefile.am文件,该文件用于描述源文件与目标文件的关系。本文对应的Makefile.am文件如下所示:

624ad89820a2ccf8d4861368b1113abb.png

可以看出该文件非常简单,这比写一个Makefile要简单的多。

如果要生成多个目标文件,需要在这里写多个源文件与目标文件的对应关系。这种情况是非常常见的,比如一些复杂的项目中通常会包含主程序,测试程序,动态库等等。

生成configure文件

上述文件都生成后就可以生成configure文件了。该文件是用于生成Makefile的一个脚本。我们在很多开源项目中肯定都遇到过。在开源项目中通常都有一个生成好的configure文件,我们只需要执行该文件就可以生成Makefile。

生成configure文件的方法很简单,我们执行如下命令即可:

autoconf

至此我们完成了生成Makefile的所有准备工作,然后我们在该目录下面运行configure脚本,即可生成Makefile文件。

./configure

可以看出,在整个过程中我们只需要手动修改或者创建2个文件,而且修改的内容很少。最后我们就可以得到一个完整的Makefile文件。对于大型的软件项目,这种方法无疑是非常有效的。

今天的内容就到这里,大家只需要按照步骤运行就可以生成Makefile文件。后续我们在对每个工具进行更加深入的介绍,这样大家不仅能知其然,还能知其所以然。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/489809.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

mysql工作台安装使用_如何安装MySQL工作台?

问题描述在10.04或10.10上安装MySQL工作台不是问题,因为deb软件包可以在MySQL的网站上找到。但是没有11.04 deb包。那么,如何在11.04上安装MySQL工作台并在通过apt-get update向ubuntu提供更新时自动更新它。最佳解决办法从MySQL Workbench downloads页面…

华为轮值董事长郭平:打造VR/AR信息高速公路,支撑产业繁荣

来源:华为10月19日,以“VR让世界更精彩——VR5G开启感知新时代”为主题的2019世界VR产业大会在江西省南昌市举行。华为轮值董事长郭平发表了《打造VR/AR 信息高速公路,支撑产业繁荣》的主题演讲。郭平认为:VR/AR将成为5G时代的首批…

使用Ping命令解析主机名解析出来的是IPv6

如果你经常使用ping命令,并身处局域网,那么你肯定会有这样一个疑问:Ping计算机名为何是IPv6地址?问这个问题的人很少见,大多都是对网络知识稍有了解的人,所以才会闻到关于ping的问题,而且在这之…

cstring判断包含字符串_作为java程序员要知道的大厂常见的算法面试题:字符串的包含...

1.2 字符串的包含题目描述给定一长字符串a和一短字符串b。请问,如何最快地判断出短字符串b中的所有字符是否都在长字符串a中?请编写函数bool StringContain(string &a, string &b)实现此功能。为简单起见,假设输入的字符串只包含大写…

数字双胞胎技术和物联网如何帮助企业取得成功

来源:物联之家网(iothome.com)到2023年,全球数字双胞胎市场预计将达到150亿美元,2017年至2023年的复合年增长率(CAGR)为37%。通用电气、IBM和微软等主要公司正在使用数字双胞胎技术来…

武汉凭什么被列为国家超大城市?

2014年11月,国务院发布国发2014第51号文件《关于调整城市规模划分标准的通知》,新标准将城市划分为五类七档,其中规定:城区常住人口1000万人以上的城市为超大城市。 根据该标准,此前北京、上海、天津、重庆、广州、深圳…

sql中排序序号_SQL 和 SPL 的有序运算对比

【摘要】 有序运算是指按照一定的次序对有序集合的成员进行计算。SQL 和 SPL 是大家比较熟悉的程序语言,本文将探讨对于有序运算问题,这两种语言的解决方案和基本原理。如何简便快捷的处理有序运算,这里为你全程解析,并提供 SQL 和…

前方高能!AI 大牛 LeCun 设想下一个新前沿:摈弃深度学习的所有概率技巧,改而掌握不断转变的能量值...

来源:云头条据深度学习界的领军人物Yann LeCun声称,AI的下一个发展阶段可能是摈弃深度学习的所有概率技巧,改而掌握不断转变的能量值。据说工程师(以及一些科学家,但以工程师为主)早在坐到板凳上搞设计之前…

2019年中国智能制造发展现状及趋势分析报告

来源:前瞻产业研究院未来智能实验室是人工智能学家与科学院相关机构联合成立的人工智能,互联网和脑科学交叉研究机构。未来智能实验室的主要工作包括:建立AI智能系统智商评测体系,开展世界人工智能智商评测;开展互联网…

元学习—Meta Learning的兴起

来源:专知【导读】元学习描述了训练深度神经网络相关的更高级别的元素。在深度学习文献中,“元学习”一词经常表示神经网络架构的自动化设计,经常引用“ AutoML”,“少量学习”或“神经架构搜索”。OpenAI的魔方机器人手的成功源于…

python3 rid1.7.4.2 控制台中文乱码_TL;DR - 有关 Python 2 和 Sublime Text 中文 Unicode 编码问题的分析与理解...

TL;DR 问题背景: 相信很多用 Sublime Text 来写 Python 2 的同学都遇到过以下这个问题(例如这位同学 /t/100435 和这位同学/t/163012 ): 在 Sublime Text 里用 Cmd (Ctrl) B 运行代码 print u中文,想要打印出 unicode…

服务器行业深度解析:服务器未来需求知多少

来源:国盛证券一、 全球公有云加速渗透叠加企业上云大趋势来临1. 全球云领军收入增速维持高位,Q2 CAPEX 出现恢复信号全球云计算进入甜蜜点,IaaS 市场主导增长。1)2017 年 6 月,Morgan Stanley 认为全球云计算行业进入…

海上瓶子下有东西吗_洗衣液瓶子我从来不扔,瓶身这样剪几刀,解决了很多家庭的大烦恼...

洗衣液瓶子相信家家户户都会有,每次用完的空洗衣液瓶你都扔掉了吗?那就太可惜了,卖废品也卖不了几毛钱,我们可以将废弃的洗衣液瓶简单剪几刀,就能够变废为宝了,能够解决很多家庭生活中的大烦恼。今天就教大…

光耦继电器

光耦继电器(光电继电器) AQW282SX 282SZ 280SX 280SZ 284SX 284SZ 212S 212SX 21 2SZ 文章目录 光耦继电器(光电继电器)前言一、光耦继电器是什么二、光耦继电器的类型三、光电耦合器的应用总结前言 光耦继电器在工业控制、通讯、医疗设备、家电及汽车电子等领域得到广泛应…

媒体查询响应式布局的几个尺寸_媒体查询实现响应式布局

本文主要介绍 media 查询的使用。通过媒体查询,在不同的屏幕尺寸下,可以设置不同的样式。以此,可以完美解决不同屏幕适配的问题。话不多说,先来看看效果:CSSmedia screen and (max-width: 400px) {.btn {background-co…

为什么说,我们可能是宇宙中唯一的智慧生命?

来源:原理我们在宇宙中是孤独的吗?这个问题可归结为:智慧究竟是自然选择的一种可能结果,还是一种不太可能的侥幸?显而易见的是,可能的事件可以经常发生;不太可能的事件很少发生,或者…

jeecg输入中文查询导表为空_学术利器—SCI期刊影响因子查询/中文核心期刊查询系统更新...

吐槽想起自己第一次投中文期刊的情形:当时学校最低要求是发表一篇核心级别的期刊论文,但是哪些期刊是核心期刊呢?完全不知道!都怎么投稿呢?也完全不知道!只能问问周围的同学或者师兄师姐。他们也就知道谁谁…

Python 学习随笔1

在一个列表中,找出重复数组的位置。 比如在列表name [1, 5, 8, 22, 56, 2, 8, 45, 7, 2, 35, 2, 486, 2, 152, 111, 265, 2, 2]中,找出2的位置。 方法1: 流程为: 找到第一个2的位置,然后在2之后的一个数后面切片&…

震撼!15项世界互联网领先科技成果发布,将对你的生活产生什么影响?

来源:浙江发布10月20日下午,世界互联网领先科技成果发布活动在乌镇互联网国际会展中心举行。今年6月,世界互联网大会组委会向全球互联网企业、科研机构、高等院校以及个人征集全球互联网领域的领先科技成果,收到了来自中国、美国、…

java执行查询postgresql得到中文乱码_Greenplum: 基于PostgreSQL的分布式数据库内核揭秘(上篇)...

关于作者姚延栋,山东大学本科,中科院软件所研究生。PostgreSQL中文社区委员,致力于Greenplum/PostgreSQL开源数据库产品、社区和生态的发展。一、数据库内核揭秘Greenplum 是最成熟的开源分布式分析型数据库(今年6月份预计发布的 Greenplum 6…