autoconf安装关于可移植的源代码详解

运维 系统运维
《Linux高级程序设计》《Linux高级程序设计》第3章可移植性,这一章大致被分为两部分,前半部分介绍纯软件的可移植性,后半部分着重介绍为不同的硬件平台编写软件,本节为大家介绍的是可移植的源代码(GNU Autoconf)。

 

 

GNU Autoconf用于产生configure脚本,该脚本在编译应用程序之前运行。configure脚本可以运行一系列开发者要求的测试以确定该软件是否可以在一个特定环境中编译。例如,它可以确定你的机器上安装的(GNU或非GNU)C编译器的版本,并确保某些标准C头文件已准备好。它也可能会做一些更复杂的事情——GNU autoconf有着很大的灵活性。

 

GNU configure可以用于建立包含一个特定系统动态信息的头文件,这些动态信息可用于源代码测试。例如,一个编译周期通常会创建一个头文件config.h,它包含许多#define声明对应已经经过测试的特征。如果GNU configure确定本地软件环境适合编译软件,那么这些定义将有助于增加软件的灵活性,因为它们允许在必要的时候进行条件代码编译。

你很快会意识到需要使用GNU configure,因为它将极大地简化了你在Linux上的开发工作。

下面是一个configure.in的示例文件,configure脚本就是通过它生成的:

  


你可以看到这个文件较短,而且只包含几个命令(实际上都是一些宏,许多工具都是通过M4 宏处理器建立的,但并不影响这里的讨论)。
configure.in文件以命令AC_PREREQ开头,它要求Autoconf的***版本是2.59。因此,用于生成configure脚本的系统必须安装了GNU Autoconf 2.59。其后的AC_INIT用于告诉Autoconf软件包的名称、版本和作者的电子邮件地址。随后是一连串以AC开头的命令,它们直接确定哪些特征和测试需要包含在configure脚本中。

你很快会了解到configure.in文件中其他行的含义。

这个示例文件中的主要Autoconf命令是:

AC_CANONICAL_SYSTEM:由Autoconf来确定是为主机编译还是为另一个目标系统编译,并在必要时处理交叉编译 。

AC_CONFIG_SRCDIR:测试是否存在文件src/hello.c,如果没有发现它,将大声抱怨。这用于确保用户是在正确的目录位置下运行正确的脚本,等等。
 
AC_PROG_CC:测试是否存在C编译器(例如,如果系统中安装了GCC,它将检测到它)。
 
AC_HEADER_STDC:测试标准C头文件的可用性(在/usr/include目录中)。
 
AC_C_BIGENDIAN:确定机器的字节序(详见3.3节)——如果需要,这是你可以添加的众多定制测试中的一个。
 
AC_CHECK_HEADERS:指定要测试的额外的系统头文件。
 
AC_OUTPUT:指定GNU Autoconf运行之后将输出的文件列表。在本例中,GNU Autoconf将导致在顶层目录和子目录src中生成Makefile文件。

configure脚本从configure.in文件中自动生成并基于可移植的shell代码。这一点非常重要,因为要想知道任一给定的Linux或UNIX系统安装的是哪种shell是非常困难(或不可能)的。虽然几乎所有的Linux系统都会安装bash,但既然存在这种可能性,我们还是值得提供这样的灵活性。除非你决定编写自己的configure测试,否则你不需要担心要编写自己的可移植shell代码(如果真的需要,请查看Autoconf文档)。

【编辑推荐】

  1. Linux 查看磁盘空间实现代码介绍
  2. Linux操作系统需要微软的十大帮助
  3. 探寻Linux到底需要多低的配置
  4. Linux测试工具tcpdump监视TCP/IP连接命令介绍
  5. Linux流量控制实例应用介绍
责任编辑:chenqingxiang 来源: 人民邮电出版社
相关推荐

2010-06-22 15:45:06

Autoconf使用

2010-06-22 17:05:04

Autoconf教程

2010-06-22 16:09:42

Autoconf教程

2017-12-26 09:35:33

2011-08-24 15:42:38

LUA源代码

2010-06-22 16:18:54

2011-08-24 17:15:33

Lua源代码文件

2009-06-22 13:41:00

Java开放源代码Sun

2022-09-15 07:55:22

WPFMAUI内存

2012-02-02 16:39:40

CheckBox控件源代码

2010-06-22 16:05:40

Autoconf rp

2011-08-24 16:24:54

Lua源代码

2010-03-02 10:44:52

Linux rpm

2010-06-22 14:55:21

autoconf安装

2010-06-22 15:26:58

autoconf安装

2010-06-22 15:13:32

autoconf安装

2010-06-22 15:24:11

autoconf安装

2011-08-25 14:03:32

UbuntuLUA安装

2010-06-22 16:31:59

Autoconf教程

2010-06-22 16:24:57

Autoconf教程
点赞
收藏

51CTO技术栈公众号