Makefile

在公司学到的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




你可能感兴趣的:(makefile)