autoconf
Linux中的configure/make/make install到底在干吗?
-
./config
configure是一个脚本,一般由Autoconf工具生成,用于检测当前系统环境是否满足安装所需条件;
比如是否支持安装,是否已经安装依赖等。configure脚本最后生成一个Makefile文件
-
make
make是一个命令,使用第一步的Makefile文件编译源码。
-
make install
make install表示运行"目标为install的make命令",即将编译后的结果复制到相应目录中。
使用autoconf过程
-
使用命令aclocal会生成m4文件(全称是macro,m后面有4个字母),m4是一种宏处理器,它是 POSIX 标准的一部分
-
autoconf,是生成configure文件的,configure是一个脚本,它能设置源程序来适应各种不同的操作系统平台,并且根据不同的系统来产生合适的Makefile,从而可以使你的源代码能在不同的操作系统平台上被编译出来。
-
automake用来生成Makefile.in文件
-
一般需要 源码 configure.ac Makefile.am
Autotools
autotools用于生成Makefile文件,降低开发难度。Autotools包含以下几个部分
- autoscan
- aclocal
- autoconf
- autoheader
- automake
Autotools使用步骤
我使用了一个非常简单的只有helloworld程序来展示Autotools使用步骤。
#include <stdio.h>
int main(){
printf("Hello world\n");
return 0;
}
-
autoscan命令
第一步需要在项目目录下执行autoscan命令。命令用于扫描工作目录,生成configure.scan文件。注意:configure.scan文件需要重新命令成configure.ac,然后才能继续
-
编辑configure.ac文件,添加宏定义
宏定义如下:
标签 说明 AC_PREREQ 声明autoconf要求的版本号 AC_INIT 定义软件名称、版本号、联系方式 AM_INIT_AUTOMAKE 必须要的,参数为软件名称和版本号 AC_CONFIG_SCRDIR 宏用来侦测所指定的源码文件是否存在, 来确定源码目录的有效性 AC_CONFIG_HEADER 宏用于生成config.h文件,以便 autoheader 命令使用 AC_PROG_CC 指定编译器,默认GCC AC_CONFIG_FILES 生成相应的Makefile文件,不同文件夹下的Makefile通过空格分隔 AC_OUTPUT 用来设定 configure 所要产生的文件,如果是makefile,configure 会把它检查出来的结果带入makefile.in文件产生合适的makefile # -*- Autoconf -*- # Process this file with autoconf to produce a configure script. AC_PREREQ([2.69]) AC_INIT([FULL-PACKAGE-NAME], [VERSION], [BUG-REPORT-ADDRESS]) AC_CONFIG_SRCDIR([main.c]) AC_CONFIG_HEADERS([config.h]) AM_INIT_AUTOMAKE(1.0) AC_CONFIG_FILES([Makefile]) # Checks for programs. AC_PROG_CC # Checks for libraries. # Checks for header files. # Checks for typedefs, structures, and compiler characteristics. # Checks for library functions. AC_OUTPUT
-
aclocal命令
执行aclocal命令,扫描configure.ac文件产生aclocal.m4文件,该文件主要处理本地的宏定义,根据已经安装的宏,用户定义的宏和acinclude.m4文件中的宏configure.ac 文件需要的宏集中定义到文件 aclocal.m4 中
-
autoconf命令
命令将configur.ac文件中的宏展开,生成 configure 脚本
5. autoheader命令
执行autoheader命令。该命令生成 config.h.in 文件。该命令通常会从 "acconfig.h” 文件中复制用户附加的符号定义。该例子中没有附加的符号定义, 所以不需要创建 "acconfig.h” 文件
6. 创建Makefile.am文件
Makefile.am是比Makefile更高层次的规则,指定需要生成什么文件,依赖什么文件和安装到什么目录。automake会根据Makefile.am生成Makefile.in
-
bin_PROGRAMS =
bin_PROGRAMS用于指定要生成的可执行程序文件,可执行文件在安装时需要被安装到系统中,如果不想要安装到系统中,需要用noinst_PROGRAMS来代替
-
xxx_SOURCES =
xxx_SOURCES表示生成可执行应用程序所用的源文件,这里注意,xxx_是由前面的bin_PROGRAMS指定的,如果前面是生成example,那么这里就是example_SOURCES,其它的类似标识也是一样
-
xxx_CPPFLAGS =
xxx_CPPFLAGS 这和Makefile文件中一样,表示C语言预处理参数
-
xxx_LDFLAGS =
xxx_LDFLAGS 连接的时候所需库文件的标识,这个也就是对应一些如-l,-shared等选项
-
noinst_HEADERS =
这个表示该头文件只是参加可执行文件的编译,而不用安装到安装目录下。如果需要安装到系统中,可以用include_HEADERS来代替
-
INCLUDES =
INCLUDES 定义链接时所需要的头文件及引用的头文件目录
-
xxx_LDADD =
xxx_LDADD 定义链接时所需要的库文件
-
automake --add-missing命令
automake --add-missing命令生成Makefile.in文件。使用选项 “–add-missing” 可以让 Automake 自动添加一些必需的脚本文件。如果发现一些文件不存在,可以通过手工 touch命令创建。
-
configure命令
./congigure主要把 Makefile.in 变成最终的 Makefile 文件。configure会把一些配置参数配置到Makefile文件里面。
-
make命令
执行make命令。make执行后,会生成hello的可执行文件。