.PHONY: all clean
CC = gcc
RM = rm
MKDIR = mkdir
CFLAGS = -Wall -std=gnu99
INC = -I ../include/hh_include
DIR_OBJS = ../obj
DIR_EXEC = ../exec
DIRS := $(DIR_OBJS) $(DIR_EXEC)
EXEC = prin
SRCS = $(wildcard *.c)
OBJS = $(SRCS:.c=.o)
OBJS := $(addprefix $(DIR_OBJS)/,$(OBJS))
EXEC := $(addprefix $(DIR_EXEC)/,$(EXEC))
all: $(DIRS) $(EXEC)
$(DIRS):
$(MKDIR) $@
$(EXEC):$(OBJS)
$(CC) -o $@ $^
$(DIR_OBJS)/%.o:%.c
$(CC) $(CFLAGS) $(INC) -o $@ -c $^
clean:
$(RM) -rf $(DIRS) $(EXEC)
解釋:
1、.PHONY 修飾的目標就是只有規則沒有依賴。由於makefile只能有一個目標,所以可以使用all來構造一個沒有規則的終極目標。
並以可執行文件作為依賴。clean 清除所有的依賴和編譯時生成的文件
2、CC RM MKDIR CFLAGS 作為變量,使用該變量的值使用$(變量名)
3、INC 指定的是編譯源文件所需要的頭文件的路徑
4、./ 為當前目錄 ../為當前目錄的上一層目錄
5、SRCS = $(wildcard *.c) 當前目錄下的所有源文件
OBJS := $(addprefix $(DIR_OBJS)/,$(OBJS)) 生成目標文件存放的目錄
EXEC := $(addprefix $(DIR_EXEC)/,$(EXEC)) 生成可執行文件存放的目錄
原文鏈接:https://blog.csdn.net/sxf_123456/article/details/56668015
