Autoconf简介

2023-12-09 10:38
文章标签 简介 autoconf

本文主要是介绍Autoconf简介,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

本系列文章均翻译自Autoconf官方文档:Autoconf Manual,github同步项目:question

Autoconf是一个用于生成shell脚本的工具,可以自动配置软件源代码以适应多种类似POSIX的系统。为了让你的软件包在所有的不同系统上都可以进行编译。

GNU 构建系统

Autoconf解决了系统特使构建和运行时信息的难题,但在软件开发时还有更多的难题,GNU构建系统是为了更好的开发软件而开发的一套完整的公益事业。
主要组成部分有AutoconfAutomakeLibtool

Automake

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

Gnulib

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

Libtool

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

制作configure脚本

下面的图表演示了如何生成可在configure中使用的文件:

后缀*代表执行过程,[]代表可选项

  • 只使用Autoconf
     your source files --> [autoscan*] --> [configure.scan] --> configure.acconfigure.ac --.|   .------> autoconf* -----> configure[aclocal.m4] --+---+|   `-----> [autoheader*] --> [config.h.in][acsite.m4] ---'Makefile.in
  • 使用Automake:
     [acinclude.m4] --.|[local macros] --+--> aclocal* --> aclocal.m4|configure.ac ----'configure.ac --.+--> automake* --> Makefile.inMakefile.am ---'
  • 配置一个软件包时如何使用文件:
                            .-------------> [config.cache]configure* ------------+-------------> config.log|[config.h.in] -.       v            .-> [config.h] -.+--> config.status* -+               +--> make*Makefile.in ---'                    `-> Makefile ---'

编写configure.ac

configure.ac包含了Autoconf的宏调用,用于测试程序包需要的或可以使用的系统功能。

  • Autoconf有对许多功能进行检查的宏
  • 对于大部分功能,你可以使用模板宏进行客户端检查
  • 对于一些特别的功能,需要手写shell命令

autoscan可以是良好的开端。

shell脚本编译器

autoconf是为了产生可移植的shell脚本–configure的编译器。

Autoconf语言

原文:Autoconf-Language

引用符号是[],强烈建议对所有包含 宏名、逗号、括号、前导空格、换行符 的参数都加上引用符号。
参数中的任何前导空格和新的行都会被忽视,除非被引用。
详细引用规则

  • 当在宏参中使用相同的文本时,必须有一个额外的引用级别,并且对重复的部分或者整体进行双重的符号引用。
	已经在文本中引用了AC_DC:[echo "Hard rock was here!  --AC_DC"]宏参中引用时:AC_MSG_WARN([[AC_DC] stinks  --Iron Maiden])

引用宏的黄金法则是每扩展一次宏,就去除一次引用。whenever you expect macro expansion, expect quote expansion; i.e., expect one level of quotes to be lost.

描述不能被引用两次。

注释以#开头

note:引用变量:如果是宏赋值的变量,则可直接$xxx,如果是shell变量则需要${xxx}。如果赋值与引用都在一段shell脚本里面,那么可直接引用$xxx

标准configure.ac布局

按照推荐顺序来调用宏:

 AC_INIT(package, version, bug-report-address)information on the packagechecks for programschecks for librarieschecks for header fileschecks for typeschecks for structureschecks for compiler characteristicschecks for library functionschecks for system servicesAC_CONFIG_FILES([file...])AC_OUTPUT

使用autoscan插件生成configure.ac

autoscan检查在目录下的源文件。

生成configure.scan文件之后需要检查修改才能将其重命名为configure.ac

使用ifnames列出条件语句

ifnames打印所有给定的C源文件中的#if, #elif, #ifdef, or #ifndef出现在执行文件中的标识符排序列表

使用autoconf创建configure

无参运行autoconf从configure.ac创建configure。
autoconf processes configure.ac with the M4 macro processor, using the Autoconf macros.

如果加了参数,那么它从那个文件中读取并输出配置脚本到标准输出;如果加了参数-,它从标准输读取然后输出到标准输出。

Autoconf宏被定义在多个文件里面。先找跟随Autoconf一起发布的文件中的宏,再在含有发布的Autoconf宏文件的文件夹中找可选文件[acsite.m4]中的宏,然后在当前文件夹中找[aclocal.m4]的宏。后定义的宏会覆盖之前定义的宏。

建议使用–trace选项来检查configure.ac文件。

使用autoreconf更新configure脚本

autoreconf 重复运行 autoconf, autoheader, aclocal, automake, libtoolize, and autopoint (when appropriate) 在特殊目录及其子目录下更新GNU构建系统。默认只更新老的文件。

不会传递–autoconf-dir=dir 或 --localdir=dir。

这篇关于Autoconf简介的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/473481

相关文章

Java Docx4j类库简介及使用示例详解

《JavaDocx4j类库简介及使用示例详解》Docx4j是一个强大而灵活的Java库,非常适合需要自动化生成、处理、转换MicrosoftOffice文档的服务器端或后端应用,本文给大家介绍Jav... 目录1.简介2.安装与依赖3.基础用法示例3.1 创建一个新 DOCX 并添加内容3.2 读取一个已存

Java中最全最基础的IO流概述和简介案例分析

《Java中最全最基础的IO流概述和简介案例分析》JavaIO流用于程序与外部设备的数据交互,分为字节流(InputStream/OutputStream)和字符流(Reader/Writer),处理... 目录IO流简介IO是什么应用场景IO流的分类流的超类类型字节文件流应用简介核心API文件输出流应用文

Spring Security简介、使用与最佳实践

《SpringSecurity简介、使用与最佳实践》SpringSecurity是一个能够为基于Spring的企业应用系统提供声明式的安全访问控制解决方案的安全框架,本文给大家介绍SpringSec... 目录一、如何理解 Spring Security?—— 核心思想二、如何在 Java 项目中使用?——

Java Stream 并行流简介、使用与注意事项小结

《JavaStream并行流简介、使用与注意事项小结》Java8并行流基于StreamAPI,利用多核CPU提升计算密集型任务效率,但需注意线程安全、顺序不确定及线程池管理,可通过自定义线程池与C... 目录1. 并行流简介​特点:​2. 并行流的简单使用​示例:并行流的基本使用​3. 配合自定义线程池​示

PostgreSQL简介及实战应用

《PostgreSQL简介及实战应用》PostgreSQL是一种功能强大的开源关系型数据库管理系统,以其稳定性、高性能、扩展性和复杂查询能力在众多项目中得到广泛应用,本文将从基础概念讲起,逐步深入到高... 目录前言1. PostgreSQL基础1.1 PostgreSQL简介1.2 基础语法1.3 数据库

Python库 Django 的简介、安装、用法入门教程

《Python库Django的简介、安装、用法入门教程》Django是Python最流行的Web框架之一,它帮助开发者快速、高效地构建功能强大的Web应用程序,接下来我们将从简介、安装到用法详解,... 目录一、Django 简介 二、Django 的安装教程 1. 创建虚拟环境2. 安装Django三、创

MySQL 索引简介及常见的索引类型有哪些

《MySQL索引简介及常见的索引类型有哪些》MySQL索引是加速数据检索的特殊结构,用于存储列值与位置信息,常见的索引类型包括:主键索引、唯一索引、普通索引、复合索引、全文索引和空间索引等,本文介绍... 目录什么是 mysql 的索引?常见的索引类型有哪些?总结性回答详细解释1. MySQL 索引的概念2

Qt QCustomPlot库简介(最新推荐)

《QtQCustomPlot库简介(最新推荐)》QCustomPlot是一款基于Qt的高性能C++绘图库,专为二维数据可视化设计,它具有轻量级、实时处理百万级数据和多图层支持等特点,适用于科学计算、... 目录核心特性概览核心组件解析1.绘图核心 (QCustomPlot类)2.数据容器 (QCPDataC

rust 中的 EBNF简介举例

《rust中的EBNF简介举例》:本文主要介绍rust中的EBNF简介举例,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录1. 什么是 EBNF?2. 核心概念3. EBNF 语法符号详解4. 如何阅读 EBNF 规则5. 示例示例 1:简单的电子邮件地址

Python 异步编程 asyncio简介及基本用法

《Python异步编程asyncio简介及基本用法》asyncio是Python的一个库,用于编写并发代码,使用协程、任务和Futures来处理I/O密集型和高延迟操作,本文给大家介绍Python... 目录1、asyncio是什么IO密集型任务特征2、怎么用1、基本用法2、关键字 async1、async