本文主要是介绍Autoconf简介,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
本系列文章均翻译自Autoconf官方文档:Autoconf Manual,github同步项目:question
Autoconf是一个用于生成shell脚本的工具,可以自动配置软件源代码以适应多种类似POSIX的系统。为了让你的软件包在所有的不同系统上都可以进行编译。
GNU 构建系统
Autoconf解决了系统特使构建和运行时信息的难题,但在软件开发时还有更多的难题,GNU构建系统是为了更好的开发软件而开发的一套完整的公益事业。
主要组成部分有Autoconf
、Automake
和Libtool
。
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简介的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!