Makefile 开发环境全能管家

变量的应用:

CC=gcc 

RM=rm

EXE=main.exe

OBJS=目标

伪目标的应用:

.PHONY:clean

自动变量的应用:

$@:表示一个规则的目标

$^:表示的是规则中的所有的先决条件

$<:表示的是规则中的第一个先决条件;

变量的类别:递归扩展变量和简单扩展变量。

变量的条件赋值 :?=表示条件是否已经赋值了,如果没有则赋值;

高级变量的引用功能:在赋值的同时完成文件名后缀的替换工作;

避免变量被覆盖的方法:在变量前加override;

借助模式精简规则:% 表示通陪符

通过函数增强功能:

wildcard:当前目录下满足模式下的所有文件或者目录名列表;

例如l: $(wildcard *.c)

patsubst:,模式替换;

例如:$(patsubst %.c %.o $(RSCS))

让编译环境更加有序:

1,目标文件与最终生成的可执行文件不在同一目录中;

目录的自动创建与删除:

 以后有不懂的地方可以查看这个源程序

.PHONY: all clean 

MKDIR = mkdir

RM = rm

RMFLAGS = -rf

CC = gcc

DIR_OBJS = objs

DIR_EXES = exes

DIR_DEPS = deps

DIRS = $(DIR_OBJS) $(DIR_EXES) $(DIR_DEPS)

EXE = main.exe

EXE := $(addprefix $(DIR_EXES)/,$(EXE))

SRCS = $(wildcard *.c)

OBJS = $(SRCS:.c=.o)

OBJS :=$(addprefix $(DIR_OBJS)/,$(OBJS))

DEPS = $(SRCS:.c=.dep)

DEPS := $(addprefix $(DIR_DEPS)/,$(DEPS))

all: $(DIRS) $(EXE)

 

$(DIRS):

$(MKDIR) $@

$(EXE): $(OBJS)

$(CC) $^ -o $@

$(DIR_OBJS)/%.o: %.c 

$(CC) -c $^ -o $@

$(DIR_DEPS)/%.dep: %.c

@echo "creating $@ ...."

@set -e; 

$(RM) $(RMFLAGS) $@.tmp; 

$(CC) -E -MM $^ > $@.tmp ;

sed 's,(.*).o[ :]*,objs/1.o: ,g' < $@.tmp > $@ ;

$(RM) $(RMFLAGS) $@.tmp

clean:

$(RM) $(RMFLAGS) $(DIRS)

原文地址:https://www.cnblogs.com/wbtn6262/p/3771038.html