1,学习makefile的写法 target:prerequisites command target也就是一个目标文件,可以是Object File,也可以是执行文件。还可以是一个标签(Label),对于标签这种特性,在后续的“伪目标”章节中会有叙述。
prerequisites就是,要生成那个target所需要的文件或是目标。
command也就是make需要执行的命令。(任意的Shell命令) 如: INCL=-I$(HOME)/include LIB=-L$(HOME)/lib main:main.o main.o:main.c cc -o main main.c clean: rm main.o 又如: INCL=-I$(HOME)/include LIB=-L$(HOME)/lib all: main main:main.c cc -o main main.c clean: rm main.o 以上用的有中间文件 main.o,也可能不用 INCL=-I$(HOME)/include LIB=-L$(HOME)/lib main:main.c cc -o main main.c clean: rm main.o 2.定义变量,把中间.o文件定义成变量INCL=-I$(HOME)/includeLIB=-L$(HOME)/libOBJ=main.omain:$(OJB)main.o:main.c cc -o main $(OJB) clean: rm main.o3.清空INCL=-I$(HOME)/includeLIB=-L$(HOME)/libOBJ=main.omain:$(OJB)main.o:main.c cc -o main $(OJB) clean: rm main $(OJB)更好的做法是.PHONY clean: -rm main $(OJB)这里.PHONY告诉clean是一个伪目标 -rm的意思:如果有文件出现问题,但不要管,往下删 4.自动化变量 $@---表示规则中的目标文件集。在模式规则中,如果有多个目标,那么,"$@"就是匹配于目标中模式定义的集合。 如: main:$(OBJ) cc -o $@ $(OBJ) 和 main:$(OBJ) cc -o main $(OBJ) 也就是说 $@相当于 main
5,完整的makefileINCL=-I$(HOME)/includeLIB=-L$(HOME)/liball: main cleanCL=/opt/K/SCO/unixds/5.1.2A/usr/ccs/bin/ccOBJ=main.omain:$(OBJ) @$(CL) -o $@ $(OBJ) @mv $@ $(HOME)/lib @echo 编译完毕 .PHONY clean: rm $(OBJ) @echo 清除*.o文件