给hello . c 编制Makefile文件
形式一:
#hello makefile #注释
hello:hello.o #hello的依赖关系
gcc -o hello hello.c #hello #编译命令行
clean: # clean目标
rm -f hello *.o *.elf *.gdb #清除命令行,执行make clean 时删除编译产生的文件
评价:该形式具体化,无一般性,可维护性差
形式二:
#hello makefile #注释行
OBJS=hello.o #定义变量
EXEC=hello
CC=gcc
$(EXEC): $(OBJS) #目标行使用变量
$(CC) -o $@ $^ #编译命令行使用变量
clean:
rm -f $(EXEC) *.o *.elf *.gdb #清除命令行使用变量
评价:该形式一般性较好,可维护性好
形式三:
CC=gcc #指定编译器
EXEC=hello #定义目标文件名
OBJS=hello.o #为生成目标所使用的.o文件
CFLAGS+= #编译参数
LDFLAGS+=-static #连接参数
All:$(EXEC) #最终目标的依赖关系
$(EXEC): $(OBJS) #目标与.o文件的依赖关系
$(CC)$(LDFLAGS) -o $@ $(OBJS) #编译命令行
clean: #clean目标
rm –f $(EXEC) *.elf *.gdb *.o #执行make clean时删除编译结果
评价:该形式一般性较好,更具有可维护性形式四:
TOPDIR = ../ #定义一个目录
include $(TOPDIR)Rules.mak #包含共用编译规则文件
EXEC = $(INSTALL_DIR)/hello1 ./hello #定义变量
OBJS = hello.o
all: $(EXEC) #最终目标依赖关系
$(EXEC): $(OBJS) #执行文件与目标文件的依赖关系
$(CC) $(LDFLAGS) -o $@ $(OBJS) #编译命令行
install: #扩展目录依赖关系
$(EXP_INSTALL) $(EXEC) $(INSTALL_DIR)
clean: #clean目标
rm -f $(EXEC) *.elf *.gdb *.o #清除命令行
评价:该形式不仅一般性和可维护性好,而且具有通用性