构建系统自动化-autoreconf
autoreconf简介
autoreconf是一个GNU Autotools工具集中的一个命令,用于自动重新生成构建系统的配置脚本和相关文件。
Autotools是一组用于自动化构建系统的工具,包括Autoconf、Automake和Libtool。它们通常用于跨平台的软件项目,以便在不同的操作系统和编译环境中进行配置和构建。
autoreconf命令的作用是根据项目中的configure.ac文件和相关的Makefile.am文件,自动生成configure脚本和其他必要的文件。这些文件包括编译器选项、库依赖、安装路径等配置信息,以及用于构建和安装软件的Makefile。
通过运行autoreconf命令,可以根据项目的配置文件自动生成构建系统所需的文件,以便进行后续的编译和安装操作。这样可以简化构建过程,减少手动配置的工作量,并提高项目的可移植性。
需要注意的是,autoreconf命令需要在项目的根目录下运行,并且需要安装Autotools工具集才能使用。
autoreconf使用
关于configure.ac
configure.ac是一个用于自动配置软件项目的输入文件,它使用Autoconf工具生成configure脚本。
configure.ac文件采用了一种特定的格式,通常包含以下内容:
1. AC_INIT:这是configure.ac文件的第一行,用于指定软件项目的名称和版本号。例如:AC_INIT([myproject], [1.0])。
2. AC_CONFIG_SRCDIR:这个宏用于指定源代码文件的路径,以便在生成的configure脚本中进行检查。例如:AC_CONFIG_SRCDIR([src/main.c])。
3. AC_CONFIG_HEADERS:这个宏用于指定生成的配置头文件的名称。配置头文件包含了一些由Autoconf生成的宏定义,用于在源代码中访问配置信息。例如:AC_CONFIG_HEADERS([config.h])。
4. AC_PROG_CC:这个宏用于检查并设置C编译器的路径和名称。它会在生成的configure脚本中添加相关的检查和设置代码。例如:AC_PROG_CC。
5. AC_PROG_INSTALL:这个宏用于检查并设置安装命令的路径和名称。它会在生成的configure脚本中添加相关的检查和设置代码。例如:AC_PROG_INSTALL。
6. AC_OUTPUT:这个宏用于生成最终的configure脚本的输出部分。它会根据前面的配置信息生成相应的输出内容。例如:AC_OUTPUT。
除了上述常见的宏之外,configure.ac文件还可以包含其他自定义的宏和配置指令,用于满足特定项目的需求。
需要注意的是,configure.ac文件使用了M4宏语言进行编写,因此在编写时需要遵循M4宏的语法规则。在运行autoreconf命令时,Autoconf工具会解析configure.ac文件并生成相应的configure脚本,用于后续的配置和构建操作。
关于M4宏语言
M4是一种宏处理器语言,用于编写宏定义和宏扩展。它通常与Autoconf和其他工具一起使用,用于生成配置脚本和其他自动化任务。
下面是一些使用M4宏语言的基本概念和语法:
1. 宏定义:
- 使用define(宏名称, 宏定义)语法来定义一个宏。例如:define(VERSION, 1.0)。
- 宏名称通常使用大写字母,宏定义可以是任意文本。
- 可以使用'或"来引用宏定义中的字符串。
2. 宏扩展:
- 使用宏名称来扩展一个宏。例如:VERSION。
- 在扩展时,M4会将宏名称替换为宏定义中的内容。
3. 参数传递:
- 可以在宏定义中使用$1、$2等特殊符号来表示传递给宏的参数。例如:define(GREETING, Hello $1!)。
- 在宏扩展时,可以使用宏名称(参数)的形式来传递参数。例如:GREETING(World)。
4. 控制结构:
- 使用ifelse(条件, 真值, 假值)语法来进行条件判断。例如:ifelse($1, yes, true, false)。
- 可以使用ifdef(宏名称, 真值, 假值)来检查宏是否已定义。例如:ifdef(VERSION, defined, undefined)。
5. 文件包含:
- 使用include(文件名)语法来包含其他文件。例如:include(config.m4)。
- 可以使用m4include(文件名)来包含其他M4宏文件。
这些是M4宏语言的一些基本用法。M4还有其他更高级的功能和指令,可以根据需要进行学习和使用。在使用M4时,可以参考M4的文档和教程,以便更好地理解和应用宏处理器的功能。
相关文章:

构建系统自动化-autoreconf
autoreconf简介 autoreconf是一个GNU Autotools工具集中的一个命令,用于自动重新生成构建系统的配置脚本和相关文件。 Autotools是一组用于自动化构建系统的工具,包括Autoconf、Automake和Libtool。它们通常用于跨平台的软件项目,以便在不同…...
Mysql之InnoDB和MyISAM的区别
InnoDB和MyISAM是MySQL数据库中两种常见的存储引擎,它们在功能和性能方面有一些明显的区别。下面是它们之间的详细解释和说明: 底层数据 存数据的时候,MyISAM是数据和索引分开存储,分为MYD和MYI 而InnoDB是数据即索引࿰…...

Unity 之 Transform.Translate 实现局部坐标系中进行平移操作的方法
文章目录 Translate 默认使用局部坐标也可以转换成世界坐标 Translate 默认使用局部坐标 在Unity中,Transform.Translate是用于在游戏对象的局部坐标系中进行平移操作的方法。这意味着它将游戏对象沿着其自身的轴进行移动,而不是世界坐标轴。这在实现物…...
PostgreSQL Error: sorry, too many clients already
Error PG的默认最大连接数是100. 如果超过100就会报错sorry, too many clients already Find show max_connections; SELECT COUNT(*) from pg_stat_activity; SELECT * FROM pg_stat_activity;Solution 提高最大连接数 ALTER SYSTEM SET max_connections 然后重启pg查看…...
Vue2(路由)
目录 一,路由原理(hash)二,路由安装和使用(vue2)三,路由跳转四,路由的传参和取值五,嵌套路由六,路由守卫最后 一,路由原理(hash&#…...

中介者模式-协调多个对象之间的交互
在深圳租房市场,有着许多的“二房东”,房主委托他们将房子租出去,而租客想要租房的话,也是和“二房东”沟通,租房期间有任何问题,找二房东解决。对于房主来说,委托给“二房东”可太省事了&#…...

Python框架【自定义过滤器、自定义数据替换过滤器 、自定义时间过滤器、选择结构、选择练习、循环结构、循环练习、导入宏方式 】(三)
👏作者简介:大家好,我是爱敲代码的小王,CSDN博客博主,Python小白 📕系列专栏:python入门到实战、Python爬虫开发、Python办公自动化、Python数据分析、Python前后端开发 📧如果文章知识点有错误…...
红黑树遍历与Redis存储
引言 在计算机科学领域,红黑树(Red-Black Tree)是一种自平衡的二叉查找树,它能在O(log n)的时间复杂度内完成插入、删除和查找操作。由于其高效性和可预测性的性能,红黑树在许多领域都得到广泛应用。本文将重点介绍红…...

前端处理图片文件的方法
在项目开发过程中,有一个需求,需要前端对上传的图片进行处理,以字符串的形式传给后端,实现效果如下: 1.上传图片的组件 在该项目中,使用了element plus组件库 <el-uploadv-model:file-list"fileL…...
「Java」《深入解析Java多线程编程利器:CompletableFuture》
《深入解析Java多线程编程利器:CompletableFuture》 一、 引言1. 对多线程编程的需求和挑战的介绍2. 介绍CompletableFuture的作用和优势 二. CompletableFuture简介1. CompletableFuture是Java中提供的一个强大的多线程编程工具2. 与传统的Thread和Runnable相比的优…...

Docker容器与虚拟化技术:容器运行时说明与比较
目录 一、理论 1.容器运行时 2.容器运行时接口 3.容器运行时层级 4.容器运行时比较 5.强隔离容器 二、问题 1.K8S为何难以实现真正的多租户 三、总结 一、理论 1.容器运行时 (1)概念 Container Runtime 是运行于 k8s 集群每个节点中ÿ…...

vue导出文件流获取附件名称并下载(在response.headers里解析filename导出)
导出文件流下载,拦截器统一处理配置 需求以往实现的方法(各自的业务层写方法)现在实现的方法(axios里拦截器统一配置处理)把文章链接复制粘贴给后端,让大佬自己赏阅。 需求 之前实现的导出都是各自的业务层…...

山东省图书馆典藏《乡村振兴战略下传统村落文化旅游设计》鲁图中大许少辉博士八一新书
山东省图书馆《乡村振兴战略下传统村落文化旅游设计》鲁图中大许少辉博士八一新书...
2023-08-19力扣每日一题-水题/位运算解法
链接: 2235. 两整数相加 题意: ab 解: ab 补一个位运算写法,进位是(a&b)<<1,不进位的计算结果为a^b 实际代码: #include<iostream> using namespace std; int sum(int num1, int n…...

Hadoop学习:深入解析MapReduce的大数据魔力之数据压缩(四)
Hadoop学习:深入解析MapReduce的大数据魔力之数据压缩(四) 4.1 概述1)压缩的好处和坏处2)压缩原则 4.2 MR 支持的压缩编码4.3 压缩方式选择4.3.1 Gzip 压缩4.3.2 Bzip2 压缩4.3.3 Lzo 压缩4.3.4 Snappy 压缩4.3.5 压缩…...

LRU淘汰策略执行过程
1 介绍 Redis无论是惰性删除还是定期删除,都可能存在删除不尽的情况,无法删除完全,比如每次删除完过期的 key 还是超过 25%,且这些 key 再也不会被客户端访问。 这样的话,定期删除和堕性删除可能都彻底的清理掉。如果…...

Kotlin 高阶函数详解
高阶函数 在 Kotlin 中,函数是一等公民,高阶函数是 Kotlin 的一大难点,如果高阶函数不懂的话,那么要学习 Kotlin 中的协程、阅读 Kotlin 的源码是非常难的,因为源码中有太多高阶函数了。 高阶函数的定义 高阶函数的…...
DL——week2
要学明白的知识点: np.dot()的作用 两个数组的点积,即对应元素相乘 numpy.dot(a,b,outNone) a: ndarray 数组 b: ndarray 数组 out: ndarray, 可选,用来保存dot()的计算结果 numpy Ndarray对象 N维数组对象ndarray&am…...

如何撰写骨灰级博士论文?这是史上最全博士论文指导!
博士论文的写作是博士研究生主要要完成的工作。由于存在着较高的难度,较长的写作周期,以及在创新,写作规范,实际及理论意义等方面有着比较高的要求,博士论文的完成一般说来是有相当难度的。一篇好的博士论文不仅是一本…...

08.SpringBoot请求相应
文章目录 1 请求1.1 Postman1.2 简单参数1.2.1 原始方式1.2.2 SpringBoot方式1.2.3 参数名不一致 1.3 实体参数1.3.1 简单实体对象1.3.2 复杂实体对象 1.4 数组集合参数1.4.1 数组1.4.2 集合 1.5 日期参数1.6 JSON参数1.7 路径参数 2 响应2.1 ResponseBody注解2.2 统一响应结果…...

练习(含atoi的模拟实现,自定义类型等练习)
一、结构体大小的计算及位段 (结构体大小计算及位段 详解请看:自定义类型:结构体进阶-CSDN博客) 1.在32位系统环境,编译选项为4字节对齐,那么sizeof(A)和sizeof(B)是多少? #pragma pack(4)st…...
多场景 OkHttpClient 管理器 - Android 网络通信解决方案
下面是一个完整的 Android 实现,展示如何创建和管理多个 OkHttpClient 实例,分别用于长连接、普通 HTTP 请求和文件下载场景。 <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas…...

Mac软件卸载指南,简单易懂!
刚和Adobe分手,它却总在Library里给你写"回忆录"?卸载的Final Cut Pro像电子幽灵般阴魂不散?总是会有残留文件,别慌!这份Mac软件卸载指南,将用最硬核的方式教你"数字分手术"࿰…...

html css js网页制作成品——HTML+CSS榴莲商城网页设计(4页)附源码
目录 一、👨🎓网站题目 二、✍️网站描述 三、📚网站介绍 四、🌐网站效果 五、🪓 代码实现 🧱HTML 六、🥇 如何让学习不再盲目 七、🎁更多干货 一、👨…...

【从零学习JVM|第三篇】类的生命周期(高频面试题)
前言: 在Java编程中,类的生命周期是指类从被加载到内存中开始,到被卸载出内存为止的整个过程。了解类的生命周期对于理解Java程序的运行机制以及性能优化非常重要。本文会深入探寻类的生命周期,让读者对此有深刻印象。 目录 …...
Mysql8 忘记密码重置,以及问题解决
1.使用免密登录 找到配置MySQL文件,我的文件路径是/etc/mysql/my.cnf,有的人的是/etc/mysql/mysql.cnf 在里最后加入 skip-grant-tables重启MySQL服务 service mysql restartShutting down MySQL… SUCCESS! Starting MySQL… SUCCESS! 重启成功 2.登…...

Chromium 136 编译指南 Windows篇:depot_tools 配置与源码获取(二)
引言 工欲善其事,必先利其器。在完成了 Visual Studio 2022 和 Windows SDK 的安装后,我们即将接触到 Chromium 开发生态中最核心的工具——depot_tools。这个由 Google 精心打造的工具集,就像是连接开发者与 Chromium 庞大代码库的智能桥梁…...
vue3 daterange正则踩坑
<el-form-item label"空置时间" prop"vacantTime"> <el-date-picker v-model"form.vacantTime" type"daterange" start-placeholder"开始日期" end-placeholder"结束日期" clearable :editable"fal…...

VisualXML全新升级 | 新增数据库编辑功能
VisualXML是一个功能强大的网络总线设计工具,专注于简化汽车电子系统中复杂的网络数据设计操作。它支持多种主流总线网络格式的数据编辑(如DBC、LDF、ARXML、HEX等),并能够基于Excel表格的方式生成和转换多种数据库文件。由此&…...

Matlab实现任意伪彩色图像可视化显示
Matlab实现任意伪彩色图像可视化显示 1、灰度原始图像2、RGB彩色原始图像 在科研研究中,如何展示好看的实验结果图像非常重要!!! 1、灰度原始图像 灰度图像每个像素点只有一个数值,代表该点的亮度(或…...