在公司學到的Makefile。
以前版:
CC = gcc CFLAGS = -I. DEPS = calc.h all:server #在這裏 加入 clean 就可以自動清除 == make clean %.o: %.c $(DEPS) $(CC) -c -o $@ $< $(CFLAGS) server: server.o $(CC) -o $@ $^ $(CFLAGS) #如果在前面加上 ‘@’就不會顯示編譯信息 # $@ 意思是地址,即本目錄;也可以指定目錄 # $^ 意思是所依賴的文件 # calc: main.o getch.o getop.o stack.o # $(CC) -o calc main.o getch.o getop.o stack.o $(CFLAGS) .PHONEY: clean clean: @rm -f *.o core-* *~ *.*~
現在版:
.SUFFIXES: .o .c #連接後綴,把.o .c 這些文件連接起來編譯 CC = gcc HOMEDIR = $(HOME)/test/MakeFile/wildcard CFLAGS = -I$(HOMEDIR)/include/ SRCDIR = ./src SRCDIR2= ./src/src OBJDIR = ./object BINDIR = ./bin VPATH = $(SRCDIR):$(SRCDIR2) SRC = $(wildcard $(SRCDIR)/*.c) $(wildcard $(SRCDIR2)/*.c) # 顯示所有 .c 文件 OBJ = $(patsubst %.c, $(OBJDIR)/%.o, $(notdir $(SRC))) # 把顯示 .c 文件後綴,替換成 .o,指定目錄 PARAM = hello all: $(PARAM) $(PARAM): $(OBJ) $(CC) -o $(BINDIR)/$(PARAM) $^ $(CFLAGS) # 直接把要生成的文件放到 指定目錄下 echo $(SRC) echo $(OBJ) $(OBJDIR)/%.o:%.c $(CC) -c -o $@ $< $(CFLAGS) .PHONY: clean clean: $(RM) $(OBJDIR)/*.o $(BINDIR)/$(PARAM)
主要知道wildcard ,notdir,patsubst這三個函數是幹嘛的就會了。
1、wildcard : 擴展通配符
2、notdir : 去除路徑
3、patsubst :替換通配符
4.wildcard 這個就是找某個目錄下的文件的 裏面是匹配的模式
5.$(notdir $(SRC)) 就是把路徑去了,只剩下文件名
6.$(patsubst %.cpp,$(OBJDIR)/%.o,$(notdir $(SRC))) 這個就是把把.CPP都替換成.O