Makefile

makefile学习

makefile好处:一次编写,终身受益。

makefile命名规则:

  • makefile
  • Makefile

makefile三要素

  • 目标
  • 依赖
  • 规则命令

写法

目标:依赖

tab键 规则命令

第一版makefile

app:main.cpp src/*.cpp
	g++ -o app -I ./include  main.cpp src/*.cpp

如果更改其中一个文件,所有的源码都重新进行编译。

考虑分解编译过程,先生成.o文件.o文件变成结果。

第二版makefile

ObjDiv = ./src/div.cpp
ObjAdd = ./src/add.cpp
ObjMul = ./src/mul.cpp
ObjSub = ./src/sub.cpp
ObjFiles = main.o div.o add.o mul.o sub.o

app:$(ObjFiles)
        g++ -o app -I ./include $(ObjFiles)

main.o:main.cpp
        g++ -c main.cpp -I ./include 
div.o:$(ObjDiv)
        g++ -c $(ObjDiv) -I ./include 
add.o:$(ObjAdd)
        g++ -c $(ObjAdd) -I ./include 
mul.o:$(ObjMul)
        g++ -c $(ObjMul) -I ./include 
sub.o:$(ObjSub)
        g++ -c $(ObjSub) -I ./include 

注意:makefile默认处理第一个目标d’d’d’d

函数

wildcard : 可以进行查找

patsubst : 可以进行内容替换

变量

$@ 代表目标

$^ 代表全部依赖

$< 第一个依赖

$? 第一个变化的依赖

@不显示命令

-命令错继续往下执行

第三版makefile

# get all .cpp files
SrcFiles=$(wildcard *.cpp ./src/*.cpp)

# all .c files -> .o file
ObjFiles = $(patsubst %.cpp,%.o,$(SrcFiles))

app:$(ObjFiles)
        g++ -o app -I ./include $(ObjFiles)

# 模式匹配规则$< $@ 只能规则中出现
%.o:%.cpp
        g++ -c $< -I ./include -o $@

# 加上@不显示命令 -出错继续执行
clean:
        -@rm -f app
        @rm -f $(ObjFiles) 

test:
        @echo $(SrcFiles)
        @echo $(ObjFiles)

最终版本

## 匹配所有.cpp文件
CppFile = $(wildcard *.cpp ./src/*.cpp)
## 替换.cpp 为.o
ObjFile = $(patsubst %.cpp, %.o, $(CppFile))
## 头文件路径
HeadFile = ./include

all:app
	
app:$(ObjFile)
	g++ -o $@ -I $(HeadFile) $(ObjFile)

%.o:%.cpp
	g++ -c -o $@ -I $(HeadFile) $<

clean:
	-@rm -rf app
	@rm -rf $(ObjFile)

## 定义伪目标
.PHONY:clean all
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

去留意

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值