在前面的标准编译安装中,第一步是./configure[30],它会根据Makefile.in生成Makefile文件,然后make根据Makefile自动编译软件
通常在一个源码包中,已经包含了configure脚本和Makefile文件,作为课外知识,我们大致了解一下怎么生成这两个文件
autoconf用来生成configure脚本,它可以检查系统特性、编译环境、环境变量、软件参数、依赖关系等
autoconf需要用到 m4
configure.scan文件
configure.scan改名为configure.in
configure.in文件的内容,自动生成aclocal.m4文件
configure.in和aclocal.m4来产生configure文件
automake可以从Makefile.am文件自动生成Makefile.in,它主要用来配置源代码
automake需用到perl
Makefile.am
automake,根据configure.in和Makefile.am来产生Makefile.in
使用configure脚本,配合Makefile.in可以生成Makefile文件,然后用make自动化的编译软件
这里有一张生成Makefile的流程图:

Makefile的用途不只是编译软件,还可以利用它完成一些琐碎的工作,只要最后输出一个文件,都可以用make来完成
这是一个最简单的Makefile
filelist:
*
![]()
ls -lF > filelist
![]()
可以使用变量代替命令,便于维护
TARGET = filelistSOURCE = * ARG = -lF APPLICATION = ls $(TARGET):$(SOURCE)
$(APPLICATION) $(ARG) $(SOURCE) > $(TARGET)
Makefile可以有多个目标文件,我们前面提到,gcc编译时先生成目标文件,再把目标文件链接成可执行文件,Makefile应该是这样的:
OBJECTS = main.o kbd.o command.o display.o \insert.o search.o files.o utils.o
exe: $(OBJECTS) cc -oexe$(OBJECTS) main.o : main.c defs.hcc -c main.c kbd.o : kbd.c defs.h command.h cc -c kbd.c command.o : command.c defs.h command.h cc -c command.c display.o : display.c defs.h buffer.h cc -c display.c insert.o : insert.c defs.h buffer.h cc -c insert.c search.o : search.c defs.h buffer.h cc -c search.c files.o : files.c defs.h buffer.h command.h cc -c files.c utils.o : utils.c defs.h cc -c utils.c clean :
rm
exe$(OBJECTS)
Makefile还有很多强大的机制,这里就不详细介绍了