编写Makefile的心得

    技术2022-05-11  75

    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文件 


    最新回复(0)