在前面的标准编译安装中,第一步是./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 = filelist SOURCE = * 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.oexe
: $(OBJECTS) cc -oexe
$(OBJECTS) main.o : main.c defs.h cc -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 : rmexe
$(OBJECTS)
Makefile
还有很多强大的机制,这里就不详细介绍了