1、概述
什么是makefile?或许很多Winodws的程序员都不知道这个东西,因为那些Windows的IDE都为你做了这个工作,但我觉得要作一个好的和professional的程序员,makefile还是要懂。这就好像现在有这么多的HTML的编辑器,但如果你想成为一个专业人士,你还是要了解HTML的标识的含义。特别在Unix下的软件编译,你就不能不自己写makefile了,会不会写makefile,从一个侧面说明了一个人是否具备完成大型工程的能力。因为,makefile关系到了整个工程的编译规则。一个工程中的源文件不计数,其按类型、功能、模块分别放在若干个目录中,makefile定义了一系列的规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作,因为makefile就像一个Shell脚本一样,其中也可以执行操作系统的命令。 makefile带来的好处就是——“自动化编译”,一旦写好,只需要一个make命令,整个工程完全自动编译,极大的提高了软件开发的效率。make是一个命令工具,是一个解释makefile中指令的命令工具,一般来说,大多数的IDE都有这个命令,比如:Delphi的make,Visual C++的nmake,Linux下GNU的make。可见,makefile都成为了一种在工程方面的编译方法。
我相信所有在Unix/Linux下编写过C/C++程序都遇到或使用过Makefile,使用make编译程序相当简单,但是使用make来开发程序却不那么简单。对于一个程序,Makefile小则几百行多则上万行,这对于程序员来说是一件相当痛苦的事情。为此GNU提供Autoconf、Automake两个软件来自动生成Makefile文件,这个程序员提供了很大的方便。
2、准备工作
首先要确认已安装一下软件:
a) GNU autoconf
b) GNU automake
c) GNU m4
d) GNU libtool
3、一个简单的例子
a)创建目录
mkdir hello
cd hello/
mkdir src
b)在src目录编写源代码hello.c
源代码如下:
#include <stdio.h>
int main(int argc , char **argv)
{
printf("Hello,world!\n");
return0;
}
c)编写Makefile.am文件
在src目录下编写Makefile.am文件:
AUTOMAKE_OPTIONS = foreign
bin_PROGRAMS = hello
hello_SOURCES = hello.c
hello_LDADD = -lpthread (这里只是为了测试,实际不需要)
退到hello目录下编写Makefile.am文件:
AUTOMAKE_OPTIONS=foreign
SUBDIRS = src
e) autoscan并修改configure.in
执行autoscan命令,生成configure.scan文件,将其更名为configure.in,并修改其内容:
# -*- Autoconf -*-
# Pr