1.什么是makefile?
makefile 文件用来指示make 如何编译和链接一个程序。
2.一个简单的makefile 文件可能会是下面这个样子:
target ...:prerequisites ...
recipe
...
...
target(目标) :可以是程序产生的目标文件的文件名,也可能是一些action 的定义,比如"clean"
prerequisite(前提) :是形成目标文件所需要的文件,目标文件的形成依赖于这些文件。
recipe(方法): 描述了如何用prerequisite(前提)来生成target(目标),通常是一些make 所执行的命令。每一条recipe前面需 要添加一个tab 键,make 依靠此来识别一条recipe.
3.一个makefile的例子:(八个c源文件和一些头文件,生成目标文件edit)
edit : main.o kdb.o command.o display.o \
insert.o search.o files.o utils.o
cc -o edit main.o kbd.o command.o display.o \
insert.o search.o files.o utils.o
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 :
rm edit main.o kdb.o command.o display.o \
insert.o search.o files.o utils.o
如果一行太长的话,可以使用反斜杠"\"分割成两行,效果和使用一行一样。
运行"make" 来生成 目标文件edit
运行"make clean" 来清除edit 和所有的.o文件。
target 'clean' 不同于其他的targets,这里不是一个目标文件的名字,而是一个action的名字。这里clean 不是其他target的prerequisite(前提),make 不会执行clean操作,除非你指定('make clean')。同时,'clean'也不包含任何的prerequisite(前提),这种action的目的是执行一些特定的操作。
像'clean'这种,只是一个action,和文件无关的target 称为phony(假的) target.