Makefile学习笔记

一、基础知识:

在这里插入图片描述

命名:makefile,Makefile

1个规则

基本原则:若想生成目标,检查规则中的依赖条件是否存在,如不存在,则寻找是否有规则用来生成该依赖文件

目标:依赖条件
	(一个tab缩进)命令

1.目标的时间必须晚于依赖条件的时间,否则,更新目标
2.依赖条件如果不存在,找寻新的规则去产生依赖条件
ALL:指定makefile的终极目标

2个函数

src = $(wildcard ./*.c):匹配当前工作目录下的所有.c文件,将文件名组成列表,赋值给src ,src = add.c sub.c div1.c
obj = $(patsubst %.c,%.o,$(src)):将参数3%(src)中,包含参数1%.c的部分,替换为参数2%.o,obj = add.o sub.o div1.o

清除函数:

clean:(没有依赖)
	-rm -rf %(obj) a.out

3个自动变量

$@ : 在规则的命令中,表示规则中的目标
$< : 在规则命令中,表示规则中的第一个条件。如果将该变量应用在模式规则中,它可将依赖条件列表中的依赖依次取出,套用模式规则
$^ : 表示规则中的所有条件

模式规则:

%.o:%.c
	gcc -c $< -o $@

在这里插入图片描述静态模式规则:
更加容易地定义多目标的规则

$(obj):%.o:%.c
	gcc -c $< -o %@

伪目标:
作用是,如果同级文件下有clean的同名文件,而makefile里的clean命令又没有依赖,如果此时执行make clean,就不会正常执行clean命令,那么就需要加上这个伪目标,写在原先的clean后即可

.PHONY: clean ALL

二、案例:

第一版:

在这里插入图片描述
第二版:
更加方便扩展
在这里插入图片描述
第三版:
多目录的情况
目录结构:
在这里插入图片描述

CC=g++
STD=-std=c++11
FLAG=-Wall -Werror
BIN=emis

src = $(wildcard ./manager/*.cpp)
src += $(wildcard ./service/*.cpp)
src += $(wildcard *.cpp)
OBJ = $(patsubst %.cpp,%.o,$(src))

all: $(OBJ)
	$(CC) $(STD) -o $(BIN) $(OBJ) && ./$(BIN)

%.o: %.cpp
	$(CC) $(STD) $(FLAG) -c $< -o $@ 

clean:
	-rm -rf $(OBJ) $(BIN) *.h.gch

.PHONY: all clean

另外在makefile中如果想测试取到的是否是自己想要的文件,可以用echo命令,注意,一个makefile里只能有一个all

all:
	echo $(src)
	echo $(obj)
	echo $(CFLAGS)
  • 9
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值