# # 2016.4.13 # xuwei #指定makefile隐式规则的变量 AR = ar #库打包命令 ARFLAGS = cr#库打包命令参数 AS = as #汇编命令 ARFLAGS = #汇编语言编译器参数 CC = gcc #C 编译命令 CXX = g++ #C++ 编译命令 CFLAGS= -g -Wall -fshort-wchar #C 编译器参数 CXXFLAGS = -g -Wall #C++ 编译器参数 CPPFLAGS= -g #C 预处理器参数 LDFLAGS= ld #链接器参数(ld) #指定makefile搜索目标文件和依赖文件的路径 VPATH = .:./MIPS # FILENAME = MIPS #生成目标文件 GOAL = main.out #指定库文件路径,在命令行中使用,指定编译器搜索库文件路径 #-l表示包含的库文件 -L 指定库文件路径 LDLIBS = -L./ -liconv #指定include文件路径,在命令行中使用,指定编译器搜索包含文件路径 INCLUDE_DIR = -I. #设定编译器使用静态库,默认优先使用动态库 STATIC = -static # # SOURCES # SOURCES = \ main.cpp\ CCodeConverter.cpp\ #addprefix 将.d文件前添加MIPS生成MIPS/%.d DEPENDS_CPP = \ $(addprefix MIPS/,$(SOURCES:.cpp=.d)) DEPENDS = $(DEPENDS_CPP) OBJS = $(DEPENDS:.d=.o) ASMS = $(DEPENDS:.d=.s)) DISASMS = $(DEPENDS:.d=.dis)) # #伪目标 # .PHONY: all clean creatdir # # main target # all: creatdir $(GOAL) @echo \"$(GOAL) made\" # #生成目标文件 # $(GOAL): $(OBJS) @echo \"start compile..\" $(CXX) $(CXXFLAGS) -o $(GOAL) $(OBJS) $(LDLIBS) # #文件生成规则 # MIPS/%.o : %.d MIPS/%.o : %.cpp $(CXX) -c $(INCLUDE_DIR) $(CXXFLAGS) $< -o $@ MIPS/%.o : %.c $(CC) -c $(INCLUDE_DIR) $(CFLAGS) $< -o $@ #生成依赖文件.d #sed -e 's,\($*\)\.o[ :]*,MIPS\/\1.o $@ : ,g' -e '1a \ $$(CXX) -c $$< -o $$@' <$@.$$$$ >$@; MIPS/%.d: %.cpp @echo $< @set -e; rm -f $@; \ $(CXX) -MM $(CPPFLAGS) $< > $@.$$$$; \ sed 's,\($*\)\.o[ :]*,MIPS\/\1.o $@ : ,g'<$@.$$$$ >$@;\ rm -f $@.$$$$ MIPS/%.d: %.c @echo $< @set -e; rm -f $@; \ $(CC) -MM $(CPPFLAGS) $< > $@.$$$$; \ sed 's,\($*\)\.o[ :]*,MIPS\/\1.o $@ : ,g' < $@.$$$$ > $@; \ rm -f $@.$$$$ # #伪命令 # clean: -rm -rf $(GOAL) ./MIPS/* ./*.o creatdir: ifeq ($(FILENAME),$(wildcard $(FILENAME))) @echo mips is have else @set -e;mkdir MIPS endif # #将.d文件添加到makefile中,MAKECMDGOALS 表示命令行输入的目标 # ifneq ($(MAKECMDGOALS),clean) sinclude $(DEPENDS) endif |
|