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

相关文章

ASIO网络调试助手之一:简介

多年前,写过几篇《Boost.Asio C++网络编程》的学习文章,一直没机会实践。最近项目中用到了Asio,于是抽空写了个网络调试助手。 开发环境: Win10 Qt5.12.6 + Asio(standalone) + spdlog 支持协议: UDP + TCP Client + TCP Server 独立的Asio(http://www.think-async.com)只包含了头文件,不依

业务协同平台--简介

一、使用场景         1.多个系统统一在业务协同平台定义协同策略,由业务协同平台代替人工完成一系列的单据录入         2.同时业务协同平台将执行任务推送给pda、pad等执行终端,通知各人员、设备进行作业执行         3.作业过程中,可设置完成时间预警、作业节点通知,时刻了解作业进程         4.做完再给你做过程分析,给出优化建议         就问你这一套下

容器编排平台Kubernetes简介

目录 什么是K8s 为什么需要K8s 什么是容器(Contianer) K8s能做什么? K8s的架构原理  控制平面(Control plane)         kube-apiserver         etcd         kube-scheduler         kube-controller-manager         cloud-controlle

【Tools】AutoML简介

摇来摇去摇碎点点的金黄 伸手牵来一片梦的霞光 南方的小巷推开多情的门窗 年轻和我们歌唱 摇来摇去摇着温柔的阳光 轻轻托起一件梦的衣裳 古老的都市每天都改变模样                      🎵 方芳《摇太阳》 AutoML(自动机器学习)是一种使用机器学习技术来自动化机器学习任务的方法。在大模型中的AutoML是指在大型数据集上使用自动化机器学习技术进行模型训练和优化。

SaaS、PaaS、IaaS简介

云计算、云服务、云平台……现在“云”已成了一个家喻户晓的概念,但PaaS, IaaS 和SaaS的区别估计还没有那么多的人分得清,下面就分别向大家普及一下它们的基本概念: SaaS 软件即服务 SaaS是Software-as-a-Service的简称,意思是软件即服务。随着互联网技术的发展和应用软件的成熟, 在21世纪开始兴起的一种完全创新的软件应用模式。 它是一种通过Internet提供

LIBSVM简介

LIBSVM简介 支持向量机所涉及到的数学知识对一般的化学研究者来说是比较难的,自己编程实现该算法难度就更大了。但是现在的网络资源非常发达,而且国际上的科学研究者把他们的研究成果已经放在网络上,免费提供给用于研究目的,这样方便大多数的研究者,不必要花费大量的时间理解SVM算法的深奥数学原理和计算机程序设计。目前有关SVM计算的相关软件有很多,如LIBSVM、mySVM、SVMLight等,这些

urllib与requests爬虫简介

urllib与requests爬虫简介 – 潘登同学的爬虫笔记 文章目录 urllib与requests爬虫简介 -- 潘登同学的爬虫笔记第一个爬虫程序 urllib的基本使用Request对象的使用urllib发送get请求实战-喜马拉雅网站 urllib发送post请求 动态页面获取数据请求 SSL证书验证伪装自己的爬虫-请求头 urllib的底层原理伪装自己的爬虫-设置代理爬虫coo

新一代车载(E/E)架构下的中央计算载体---HPC软件架构简介

老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 屏蔽力是信息过载时代一个人的特殊竞争力,任何消耗你的人和事,多看一眼都是你的不对。非必要不费力证明自己,无利益不试图说服别人,是精神上的节能减排。 无人问津也好,技不如人也罢,你都要试着安静下来,去做自己该做的事.而不是让内心的烦躁、焦虑、毁掉你本就不多的热情和定力。 时间不知不觉中,快要来到夏末秋初。一年又过去了一大半,成

AI学习指南深度学习篇-带动量的随机梯度下降法简介

AI学习指南深度学习篇 - 带动量的随机梯度下降法简介 引言 在深度学习的广阔领域中,优化算法扮演着至关重要的角色。它们不仅决定了模型训练的效率,还直接影响到模型的最终表现之一。随着神经网络模型的不断深化和复杂化,传统的优化算法在许多领域逐渐暴露出其不足之处。带动量的随机梯度下降法(Momentum SGD)应运而生,并被广泛应用于各类深度学习模型中。 在本篇文章中,我们将深入探讨带动量的随

OpenGL ES学习总结:基础知识简介

什么是OpenGL ES? OpenGL ES (为OpenGL for Embedded System的缩写) 为适用于嵌入式系统的一个免费二维和三维图形库。 为桌面版本OpenGL 的一个子集。 OpenGL ES管道(Pipeline) OpenGL ES 1.x 的工序是固定的,称为Fix-Function Pipeline,可以想象一个带有很多控制开关的机器,尽管加工