0、下载并安装autoconf和automake
http://ftp.gnu.org/gnu/autoconf/
这是目前最新的autoconf,版本是2.69:
http://ftp.gnu.org/gnu/automake/
这是目前最新的automake,版本是1.14:
下载完成之后,进行解压,然后安装,下面用autoconf举例,automake同理(我的环境是OSX,linux可能需要进行微小的改动)
sudo -i
tar–jxvfautoconf-latest.tar
cd autoconf-2.69
./configure
sudoxcode-select -switch /Applications/Xcode.app/Contents/Developer/
make
make install
完成之后,就可以直接使用autoconf了,因为这么make install之后,是直接安装在bin文件夹里边的
使用-h,测试一下autoconf是否已经安装完毕了:
同理安装完automake之后,就可以进行下面的步骤了
1、在目录下新建几个工程需要的测试文件
encrypt.h:
void encrypt(char *message);
encrypt.c:
#include "stdio.h"
#include "encrypt.h"
void encrypt(char *message)
{
while(*message)
{
*message = *message ^ 31;
message++;
}
puts("message encrypt end");
}
checksum.h:
int checksum(char *message);
checksum.c:
#include "checksum.h"
int checksum(char *message)
{
int c = 0;
while(*message)
{
c += c ^ (int)(*message);
message++;
}
return c;
}
test_code.c:
#include "stdio.h"
#include "encrypt.h"
#include "checksum.h"
int main()
{
char s[] = "Speak firend and enter";
encrypt(s);
printf("Encrypted to '%s'\n", s);
printf("Checksum is %i\n", checksum(s));
encrypt(s);
printf("Decrypted back to '%s'\n", s);
printf("Checksum is %i\n", checksum(s));
return 0;
}
2、生成configure
在当前目录中执行命令autoscan。帮助我们根据目录下的源代码生成一个configure.ac的模板文件configure.scan。
3、修改configure.scan
原来的内容为:
修改为:
AC_PREREQ([2.69])
#AC_INIT([FULL-PACKAGE-NAME], [VERSION], [BUG-REPORT-ADDRESS])
AC_INIT(test_code,1.0,120440324@163.com)
AM_INIT_AUTOMAKE(test_code,1.0)
AC_CONFIG_SRCDIR([test_code.c])
AC_CONFIG_HEADERS([config.h])
# 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_CONFIG_FILES([Makefile])
AC_OUTPUT
修改一下文件名,编程configure.ac
mvconfigure.scan configure.ac
说明:
(1)以“#”号开始的行均为注释行。
(2)AC_PREREQ 宏声明本文要求的autoconf版本, 如本例中的版本 2.59。
(3)AC_INIT 宏用来定义软件的名称、版本等信息、作者的E-mail等。
(4)AM_INIT_AUTOMAKE是通过手动添加的, 它是automake所必备的宏, FULL-PACKAGE-NAME是软件名称,VERSION是软件版本号。
(5)AC_CONFIG_SCRDIR 宏用来侦测所指定的源码文件是否存在, 来确定源码目录的有效性.。此处为当前目录下main.c。
(6)AC_CONFIG_HEADER 宏用于生成config.h文件,以便autoheader命令使用。
(7)AC_PROG_CC用来指定编译器,如果不指定,默认gcc。
(8)AC_OUTPUT 用来设定 configure 所要产生的文件,如果是makefile,configure 会把它检查出来的结果带入makefile.in文件产生合适的makefile。使用Automake时,还需要一些其他的参数,这些额外的宏用aclocal工具产生。
(9)AC_CONFIG_FILES宏用于生成相应的Makefile文件。
4、执行命令aclocal和autoconf,分别会产生aclocal.m4及configure两个文件:
m4是一个宏处理器.将输入拷贝到输出,同时将宏展开.宏可以是内嵌的 ,也可以是用户定义的 .除了可以展开宏,m4还有一些内建的函数,用来引用文件,执行命令,整数运算,文本操作,循环等.m4既可以作为编译器的前端,也可以单独作为一个宏处理器.
5、用命令autoheader产生configure.h.in
6、新建Makefile.am文件,填入以下内容
AUTOMAKE_OPTIONS=foreign
bin_PROGRAMS=test_code
test_code_SOURCES=encrypt.hencrypt.cchecksum.hchecksum.ctest_code.c
7、运行automake
使用选项 "--add-missing" 可以让Automake自动添加一些必需的脚本文件。
8、测试一下,刚才生成的configure,用来生成Makefile
因为我想安装的目录是/Users/pro/high/output/,所以我需要使用prefix来指定
生成出来了Makefile文件:
9、使用Makefile编译代码
直接执行make命令
10、安装到在configure中指定的文件目录
在当前目录中执行make install
11、检查生成的文件,并执行看看效果
找到/Users/pro/high/output/目录,看到有bin文件夹,下面就有我们已经生成出来的目标文件
运行一下test_code,看到确实是我们想要的功能:
12、卸载刚才make install生成的目标文件
直接使用makeuninstall进行反安装
还可以在工程目录下执行makeclean清理make编译出来的.o文件:
13、文章参考
该文章参考了网上的一些资料,比如:
http://www.laruence.com/2009/11/18/1154.html
等,有些没做记录就没看到了。不过由衷感谢,没有这些资料,仅仅是依靠autoconf和automake的Document是不够的!
不过,假如没有这些GNU工具,可能连自动配置的条件都没有!