autoconf手册(一)

简介: Autoconf   Creating Automatic Configuration Scripts   Edition 2.13, for Autoconf version 2.13   December 1998   by David MacKenzie and Ben Ell...
Autoconf
  Creating Automatic Configuration Scripts
  Edition 2.13, for Autoconf version 2.13
  December 1998
  by David MacKenzie and Ben Elliston
  
  --------------------------------------------------------------------------------
  Permission is granted to make and distribute verbatim copies of this manual provided the copyright notice and this permission notice are preserved on all copies.
  
  Permission is granted to copy and distribute modified versions of this manual under the conditions for verbatim copying, provided that the entire resulting derived work is distributed under the terms of a permission notice identical to this one.
  
  Permission is granted to copy and distribute translations of this manual into another language, under the above conditions for modified versions, except that this permission notice may be stated in a translation approved by the Free Software Foundation.
  
  只要版权声明和本许可声明保留在所有副本中,您就被授权制作和发行本手册的原文副本。 中国网管论坛bbs.bitsCN.com
  
  只要整个最终派生工作按照与本手册相同的许可声明发行,您就被授权按照与发行原文相同的条件复制和发行本手册的修改版本。
  
  除了本许可声明应该使用由基金会批准的译文之外,您被授权按照与上述修改版本相同的条件复制和发行本手册的其它语言的译文。
  --------------------------------------------------------------------------------
  
  本文档由王立翻译。 1999.12.16
  
  译者在此声明:不对任何由译文错误或者对译文的误解承担任何责任。
  --------------------------------------------------------------------------------
  
  介绍
  A physicist, an engineer, and a computer scientist were
  discussing the nature of God.?Surely a Physicist, said the
  physicist, because early in the Creation, God made Light; and you
  know, Maxwell's equations, the dual nature of electro-magnetic
  waves, the relativist consequences... An Engineer!, said the
  engineer, because before making Light, God split the Chaos into
  Land and Water; it takes a hell of an engineer to handle that big
网管联盟bitsCN_com
 

  amount of mud, and orderly separation of solids from
  liquids... The computer scientist shouted: And the Chaos,
  where do you think it was coming from, hmm?
  
  ---Anonymous
  
  Autoconf是一个用于生成可以自动地配置软件源代码包以适应多种Unix类系统的 shell脚本的工具。由Autoconf生成的配置脚本在运行的时候与Autoconf是无关的,就是说配置脚本的用户并不需要拥有Autoconf。
  
  由Autoconf生成的配置脚本在运行的时候不需要用户的手工干预;通常它们甚至不需要通过给出参数以确定系统的类型。相反,它们对软件包可能需要的各种特征进行独立的测试。(在每个测试之前,它们打印一个单行的消息以说明它们正在进行的检测,以使得用户不会因为等待脚本执行完毕而焦躁。)因此,它们在混合系统或者从各种常见Unix变种定制而成的系统中工作的很好。没有必要维护文件以储存由各个Unix变种、各个发行版本所支持的特征的列表。
  
  对于每个使用了Autoconf的软件包,Autoconf从一个列举了该软件包需要的,或者可以使用的系统特征的列表的模板文件中生成配置脚本。在shell代码识别并响应了一个被列出的系统特征之后,Autoconf允许多个可能使用(或者需要)该特征的软件包共享该特征。如果后来因为某些原因需要调整shell代码,就只要在一个地方进行修改;所有的配置脚本都将被自动地重新生成以使用更新了的代码。 网管网www_bitscn_com
  
  Metaconfig包在目的上与Autoconf很相似,但它生成的脚本需要用户的手工干预,在配置一个大的源代码树的时候这是十分不方便的。不象Metaconfig脚本,如果在编写脚本时小心谨慎, Autoconf可以支持交叉编译(cross-compiling)。
  
  Autoconf目前还不能完成几项使软件包可移植的工作。其中包括为所有标准的目标自动创建`Makefile'文件,包括在缺少标准库函数和头文件的系统上提供替代品。目前正在为在将来添加这些特征而工作。
  
  对于在C程序中的#ifdef中使用的宏的名字,Autoconf施加了一些限制(参见预处理器符号索引)。
  
  Autoconf需要GNU m4以便于生成脚本。它使用了某些UNIX版本的m4 所不支持的特征。它还会超出包括GNU m4 1.0在内的某些m4版本的内部限制。你必须使用GNU m4的1.1版或者更新的版本。使用1.3版或者更新的版本将比1.1 或1.2版快许多。
  
  关于从版本1中升级的详情,参见从版本1中升级。关于Autoconf的开发历史,参见Autoconf的历史。对与Autoconf有关的常见问题的回答,参见关于Autoconf的问题。
  
  把关于Autoconf的建议和bug报告发送到 bug-gnu-utils@prep.ai.mit.edu。请把你通过运行`autoconf --version'而获得的Autoconf的版本号包括在内。
网管联盟bitsCN_com
 

  
  创建configure脚本
  由Autoconf生成的配置脚本通常被称为configure。在运行的时候,configure 创建一些文件,在这些文件中以适当的值替换配置参数。由configure创建的文件有:
  
  一个或者多个`Makefile'文件,在包的每个子目录中都有一个(参见 Makefile中的替换);
  有时创建一个C头文件,它的名字可以被配置,该头文件包含一些#define命令(参见配置头文件);
  一个名为`config.status'的shell脚本,在运行时,它将重新创建上述文件。(参见重新创建一个配置);
  一个名为`config.cache'的shell脚本,它储存了许多测试的运行结果(参见缓存文件);
  一个名为`config.log'的文件,它包含了由编译器生成的许多消息,以便于在configure出现错误时进行调试。
  为了使用Autoconf创建一个configure脚本,你需要编写一个Autoconf的输入文件 `configure.in'并且对它运行autoconf。如果你自行编写了特征测试以补充 Autoconf所提供的测试,你可能还要编写一个名为`aclocal.m4'的文件和一个名为 `acsite.m4'的文件。如果你使用了包含#define指令的C头文件,你可能还要编写`acconfig.h',并且你需要与软件包一同发布由Autoconf生成的文件 `config.h.in'。
网管bitscn_com
 
  
  下面是一个说明了在配置中使用的文件是如何生成的图。运行的程序都标以后缀`*'。可能出现的文件被方括号(`[]')括起来。autoconf和autoheader 还读取安装了的Autoconf宏文件(通过读取`autoconf.m4')。
  
  在准备发布软件包的过程中使用的文件:
  
  你的源文件 --> [autoscan*] --> [configure.scan] --> configure.in
  
  configure.in --.? .------> autoconf* -----> configure
  ??????? +---+
  [aclocal.m4] --+? `---.
  [acsite.m4] ---'??? |
  ??????????? +--> [autoheader*] -> [config.h.in]
  [acconfig.h] ----.?? |
  ???????? +-----'
  [config.h.top] --+
  [config.h.bot] --'
  
  Makefile.in -------------------------------> Makefile.in
  
  在配置软件包的过程中使用的文件:
  
  ??????????? .-------------> config.cache
  configure* ------------+-------------> config.log
  ??????????? |
  [config.h.in] -.??? v??????.-> [config.h] -.
网管论坛bbs_bitsCN_com
 
  ??????? +--> config.status* -+??????? +--> make*
  Makefile.in ---'??????????`-> Makefile ---'
  
  编写`configure.in'
  为了为软件包创建configure脚本,需要编写一个名为`configure.in' 的文件,该文件包含了对那些你的软件包需要或者可以使用的系统特征进行测试的Autoconf宏的调用。现有的Autoconf宏可以检测许多特征; 对于它们的描述可以参见现有的测试。对于大部分其他特征,你可以使用Autconf模板宏以创建定制的测试;关于它们的详情,参见 编写测试。对于特别古怪或者特殊的特征,`configure.in' 可能需要包含一些手工编写的shell命令。程序autoscan可以为你编写`configure.in' 开个好头(详情请参见用autoscan创建`configure.in')。
  
  除了少数特殊情况之外,在`configure.in'中调用Autoconf宏的顺序并不重要。在每个`configure.in'中,必须在进行任何测试之间包含一个对AC_INIT的调用,并且在结尾处包含一个对AC_OUTPUT的调用(参见创建输出文件)。此外,有些宏要求其他的宏在它们之前被调用,这是因为它们通过检查某些变量在前面设定的值以决定作些什么。这些宏在独立的说明中给出(参见现有的测试),而且如果没有按照顺序调用宏,在生成configure时会向你发出警告。 网管朋友网www_bitscn_net
  
  为了提高一致性,下面是调用Autoconf宏的推荐顺序。通常,在本列表中靠后的项目依赖于表中靠前的项目。例如,库函数可能受到typedefs和库的影响。
  
  AC_INIT(file)
  checks for programs
  checks for libraries
  checks for header files
  checks for typedefs
  checks for structures
  checks for compiler characteris 【转自 www.bitsCN.com
相关文章
|
监控 Cloud Native 搜索推荐
Springboot/Springcloud整合ELK平台,(Filebeat方式)日志采集及管理(Elasticsearch+Logstash+Filebeat+Kibana)
Springboot/Springcloud整合ELK平台,(Filebeat方式)日志采集及管理(Elasticsearch+Logstash+Filebeat+Kibana)
3158 0
Springboot/Springcloud整合ELK平台,(Filebeat方式)日志采集及管理(Elasticsearch+Logstash+Filebeat+Kibana)
|
9月前
|
存储 人工智能 自然语言处理
通义灵码 vs. GitHub Copilot:中国AI编码工具的破局之道
全球AI编码工具形成“双极格局”,GitHub Copilot凭借先发优势主导市场,而通义灵码通过差异化路径突围。技术层面,通义灵码在中文语境理解、云原生绑定上展现优势;生态方面,Copilot依托GitHub开源生态,通义灵码则深耕阿里云企业协同场景;开发者心智战中,通义灵码以数据合规、本土化服务及定制化能力取胜。这场较量不仅是技术的比拼,更是生态逻辑与开发者需求的全面博弈,彰显中国AI编码工具“换道超车”的潜力。
1165 19
|
消息中间件 存储 Java
深入源码理解MQ长轮询优化机制
【11月更文挑战第22天】在分布式系统中,消息队列(MQ)作为一种重要的中间件,广泛应用于解耦、异步处理、流量削峰等场景。其中,延时消息和定时消息作为MQ的高级功能,能够进一步满足复杂的业务需求。为了实现这些功能,MQ系统需要进行一系列优化,长轮询机制便是其中的关键一环。本文将深入探讨MQ如何设计延时消息和定时消息的优化机制,特别是长轮询机制的实现原理及其在Java中的模拟实现。
264 2
|
存储 NoSQL 关系型数据库
PHP 使用 Redis
10月更文挑战第22天
222 6
|
NoSQL Java Redis
Redis6入门到实战------思维导图+章节目录
这篇文章提供了Redis 6从入门到实战的全面学习资料,包括思维导图和各章节目录,涵盖了NoSQL数据库、Redis安装配置、数据类型、事务、持久化、主从复制、集群等核心知识点。
Redis6入门到实战------思维导图+章节目录
|
Oracle 关系型数据库 数据库
PostgreSQL和Oracle两种数据库有啥区别?如何选择?
PostgreSQL和Oracle两种数据库有啥区别?如何选择?
896 0
|
前端开发 数据可视化 开发者
一个健壮的前端轮询
本文讨论了在不使用websocket做服务端推送的情况下,如何写出一个健壮的前端轮询。文章提供了一些常见的前端轮询的应用场景以及可能遇到的问题,欢迎大家一起讨论。
|
存储 NoSQL Linux
定时器的实现方案:红黑树和多级时间轮
定时器的实现方案:红黑树和多级时间轮
|
数据采集 算法 关系型数据库
数据分类分级实践难点
数据分类分级是开展数据全生命周期管理的基础,企业做好数据分类分级才能更好地去落实合规义务以及进行数据安全管控。今天,我们从数据分类分级落地实践的角度,来阐述企业在开展数据分类分级过程中的难点以及如何“破局”。
884 1
|
关系型数据库 PostgreSQL
PostgreSQL 的哪些参数不能通过ALTER SYSTEM SET 修改
在 PostgreSQL 中,有一些参数是不能通过 `ALTER SYSTEM SET` 语句进行动态修改的,这些参数通常需要在 PostgreSQL 的配置文件中进行手动修改。以下是一些不能通过 `ALTER SYSTEM SET` 修改的常见参数: 1. **track_activities** 2. **track_counts** 3. **track_io_timing** 4. **track_functions** 5. **track_activity_query_size** 6. **track_commit_timestamp** 7. **shared_preload
379 0