在公司学到的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
转载于:https://blog.51cto.com/2714254/1684153