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




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章