作为Linux下的程序开发人员,大家一定都遇到过Makefile,用make命令来编译自己写的程序确实是很方便。一般情况下,大家都是手工写一个简单Makefile,如果要想写出一个符合自由软件惯例的Makefile就不那么容易了。 
   在本文中,将给大家介绍如何使用 autoconf和automake两个工具来帮助我们自动地生成符合自由软件惯例的Makefile,这样就可以象常`这里写代码片` 见的GNU程序一样,只要使用“./configure”,“make”,“make install”就可以把程序安装到Linux系统中去了。这将特别适合想做开放源代码软件的程序开发人员,又或如果你只是自己写些小的Toy程序,那么 这个文章对你也会有很大的帮助。

1、创建一个main.c

#include <stdio.h>
int main(int argc, char** argv) {
    printf("hello auto makefile\n");
    return 0;
}

2、执行命令
chenyun:auto apple autoscanchenyun:autoapple ls
autoscan.log configure.scan main.c
3、修改configure.scan文件并改名为configure.ac
原文件内容:

 # -*- Autoconf -*-

# Process this file with autoconf to produce a configure script.

AC_PREREQ(2.61)
#FULL-PACKAGE-NAME, VERSION, BUG-REPORT-ADDRESS
AC_INIT(FULL-PACKAGE-NAME, VERSION, BUG-REPORT-ADDRESS)

AC_CONFIG_SRCDIR([main.c])

AC_CONFIG_HEADER([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_OUTPUT

修改后:

#                                               -*- Autoconf -*-
#确保使用的是足够新的Autoconf版本。如果用于创建configure的Autoconf的版
# 本比version 要早,就在标准错误输出打印一条错误消息并不会创建configure。
# Process this file with autoconf to produce a configure script.

AC_PREREQ([2.69])
# 初始化,定义软件的基本信息,包括设置包的全称,版本号以及报告BUG时需要用的邮箱地址
AC_INIT(cody, 1.0, 115980248@qq.com)
# 用来侦测所指定的源码文件是否存在,来确定源码目录的有效性
AC_CONFIG_SRCDIR([main.c])
# 用于生成config.h文件,以便autoheader使用
AC_CONFIG_HEADERS([config.h])
AC_INIT_AUTOMAKE(cody,1.0) #增加支持automake
# Checks for programs.
AC_PROG_CC

# Checks for libraries.

# Checks for header files.

# Checks for typedefs, structures, and compiler characteristics.

# Checks for library functions.

# 创建输出文件。在`configure.in'的末尾调用本宏一次。
AC_OUTPUT([Makefile])

4、运行 aclocal, 生成一个“aclocal.m4”文件和一个缓冲文件夹autom4te.cache,该文件主要处理本地的 宏定义

5、运行 autoconf, 目的是生成 configure

6、运行 autoheader,它负责生成config.h.in文件。该工具通常会从“acconfig.h”文件中复制用户附加的符号定义,因此此处没有附加符号定义,所以不需要创建“acconfig.h”文件
7、下面即将运行 automake, 但在此之前应该做一下准备工作!

创建Makefile.am文件

AUTOMAKE_OPTIONS=foreign #automake提供了三种软件等级:foreign、gnu和gnits,让用 户选择采用,默认等级为gnu。在本例使用foreign等级,它只检测必须的文件。

bin_PROGRAMS=main #name名字随便取 bin_PROGRAMS=[name] 但是这里的名字要与后面[name]_SOURCE 里的一致

main_SOURCES=main.c #可以添加多个源码文件 xx.c xx.h .....

8、automake –add-missing 生成configure

9、运行configure,在这一步中,通过运行自动配置设置文件configure,把Makefile.in变成了最终的Makefile。

10、make
生成可执行文件或库。

Logo

更多推荐