Autoconf简介「建议收藏」

Autoconf简介「建议收藏」Autoconf是一个用于生成shell脚本的工具,可以自动配置软件源代码以适应多种类似POSIX的系统。为了让你的软件包在所有的不同系统上都可以进行编译。GNU构建系统Autoconf解决了系统特使构建和运行时信息的难题,但在软件开发时还有更多的难题,GNU构建系统是为了更好的开发软件而开发的一套完整的公益事业。主要组成部分有Autoconf、Automake和Libtool。Auto…

大家好,又见面了,我是你们的朋友全栈君。

本系列文章均翻译自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.ac

     configure.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.in
     Makefile.am ---'
  • 配置一个软件包时如何使用文件:
                            .-------------> [config.cache]
     configure* ------------+-------------> config.log
                            |
     [config.h.in] -.       v            .-> [config.h] -.
                    +--> config.status* -+               +--> make*
     Makefile.in ---' `-> Makefile ---'

编写configure.ac

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

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 package
 checks for programs
 checks for libraries
 checks for header files
 checks for types
 checks for structures
 checks for compiler characteristics
 checks for library functions
 checks for system services
 AC_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。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/135867.html原文链接:https://javaforall.net

(0)
上一篇 2022年5月4日 上午7:40
下一篇 2022年5月4日 上午8:00


相关推荐

  • 让程序员崩溃的瞬间(非程序员勿入)(程序员形象都不好)

    阅读本文大概需要2.3333分钟。前方高能,每一个程序员看完,你不笑死个人,你来找我,我自己看了好几遍,反正笑的停不下来,太特么有才了。1.公司实习生找Bug2….

    2022年4月10日
    32
  • java集合详解和集合面试题目

    java集合详解和集合面试题目一、集合与数组数组(可以存储基本数据类型)是用来存现对象的一种容器,但是数组的长度固定,不适合在对象数量未知的情况下使用。集合(只能存储对象,对象类型可以不一样)的长度可变,可在多数情况下使用。二、层次关系如图所示:图中,实线边框的是实现类,折线边框的是抽象类,而点线边框的是接口Collection接口是集合类的根接口,Java中没有提供这个接口的直接的实现类。但是却…

    2022年6月4日
    36
  • Anaconda 和 Pycharm

    Anaconda 和 Pycharm一句话总结 Anaconda 管理和维护 Python 标准库和第三方库中的各种包及它们的依赖环境的软件 Pycharm 可以调用 Anaconda 当做解释器 Pycharm 是由 JetBrains 打造的一款 PythonIDE 即集成开发环境 在 Anaconda 中安装 jieba wordcloud 等第三方库 可以尝试用 condainstall cconda forgejieba 命令 这个命令的语法是 condainstall cchannel namepackage name 其

    2026年3月17日
    2
  • Cursor AI 编辑器教程 – 文档 – 帮助手册

    Cursor AI 编辑器教程 – 文档 – 帮助手册

    2026年3月16日
    3
  • Beego模板用法-创建beeblog[通俗易懂]

    Beego模板用法-创建beeblog[通俗易懂]Beego模板用法-创建beeblog

    2022年4月20日
    51
  • dpkg安装软件流程_DPKG命令与软件安装、APT[通俗易懂]

    dpkg安装软件流程_DPKG命令与软件安装、APT[通俗易懂]====Linux软件包====Linux系统中,软件通常以源代码或者预编译包的形式提供。软件的源代码通常需要编译为二进制代码才可使用,安装比较耗时。用户可以自行调节编译选项,决定需要的功能或组件,或者针对硬件平台作一些优化预编译包通常由软件发布者进行编译,用户只要将预编译包拷贝到系统中即可。考虑到预编译包的通用性,预编译包一般不会针对某种硬件平台优化,所包含的功能和组件也是通用的组合。ubunt…

    2022年5月21日
    93

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号