make学习
2023-04-18 12:38:24 时间
make学习,参考「Makefile 20分钟入门,简简单单,展示如何使用Makefile管理和编译C++代码」
程序见:https://github.com/ShiqiYu/CPP/tree/main/week03/examples/lab
文件结构
make语法
- g++
#「只编译不链接」编译.cpp文件,得到.o文件
g++ -c *.cpp
#链接,将.o文件链接到一起,得到可执行文件
g++ *.o file
# 显示编译时的warning
g++ -c -Wall *.cpp
版本1
## VERSION 1
hello: main.cpp printhello.cpp factorial.cpp
g++ -o hello main.cpp printhello.cpp factorial.cpp
- 目标(hello)依赖于后面的.cpp文件(main.cpp printhello.cpp factorial.cpp)
- 通过第二句生成这个目标(hello)
版本2
## VERSION 2
# 变量定义
CXX = g++
TARGET = hello
OBJ = main.o printhello.o factorial.o
# 「链接」.o文件
$(TARGET): $(OBJ)
$(CXX) -o $(TARGET) $(OBJ)
# 「编译」生成.o
main.o: main.cpp
$(CXX) -c main.cpp
printhello.o: printhello.cpp
$(CXX) -c printhello.cpp
factorial.o: factorial.cpp
$(CXX) -c factorial.cpp
版本3
## VERSION 3
# 变量定义
CXX = g++
TARGET = hello
OBJ = main.o printhello.o factorial.o
# 编译时显示warning
CXXFLAGS = -c -Wall
$(TARGET): $(OBJ)
$(CXX) -o $@ $^
%.o: %.cpp
$(CXX) $(CXXFLAGS) $< -o $@
.PHONY: clean
clean:
rm -f *.o $(TARGET)
- (
$@
)表示($(TARGET)
) - (
$^
)表示($(TARGET)
)的所有依赖,即($(OBJ)
) - (
$<
)表示($(TARGET)
)的第一个依赖,即(%.cpp
) - 通配符(\%)表示匹配所有类型的文件
- (.PHONY: clean)解决项目中出现clean文件而make clean失效的问题,因为项目中永远没有(.PHONY),所有不会失效,而(.PHONY)依赖于clean,所以make clean必执行
版本4
## VERSION 4
CXX = g++
TARGET = hello
SRC = $(wildcard *.cpp)
OBJ = $(patsubst %.cpp, %.o, $(SRC))
CXXFLAGS = -c -Wall
$(TARGET): $(OBJ)
$(CXX) -o $@ $^
%.o: %.cpp
$(CXX) $(CXXFLAGS) $< -o $@
.PHONY: clean
clean:
rm -f *.o $(TARGET)
- 将当前目录下的所有(*.cpp)文件都放在(SRC)变量里
- 「wildcard」是一个扩展通配符,常用使用:
$(wildcard PATTERN...)
,在Makefile中,它被展开为已经存在的、使用空格分开的、匹配此模式的所有文件列表 - 这里的
$(wildcard *.cpp)
表示获取工作目录下的所有.cpp文件列表
- 「wildcard」是一个扩展通配符,常用使用:
- 将(SRC)目录下的所有.cpp文件替换成.o文件
- 「patsubst」也是一个扩展通配符,语法:
$(patsubst %.c,%.o,$(wildcard *.c))
,表示替换
- 「patsubst」也是一个扩展通配符,语法:
- 更多参考:https://blog.csdn.net/m0_46535940/article/details/125086502
参考
1、http://www.freecplus.net/b7a1c199959f4349b2a98874864a2000.html
相关文章
- EasyCVR对接华为iVS订阅摄像机和用户变更请求接口介绍
- 精选 | 腾讯云CDN内容加速场景有哪些?
- 模块化网络防止基于模型的多任务强化学习中的灾难性干扰
- 用搜索和注意力学习稳健的调度方法
- 用于多变量时间序列异常检测的学习图神经网络
- 助力政企自动化自然生长,华为WeAutomate RPA是怎么做到的?
- 使用腾讯轻量云搭建Fiora聊天室
- TSRC安全测试规范
- 云计算“功守道”
- 助力成本优化,腾讯全场景在离线混部系统Caelus正式开源
- Flink 利器:开源平台 StreamX 简介
- 腾讯云实践 | 一图揭秘腾讯碳中和?解决方案
- 深度学习中的轻量级网络架构总结与代码实现
- 信息系统项目管理师(高项复习笔记三)
- Adobe国际认证让科技赋能时尚
- c++该怎么学习(面试吃土记)
- 面试官问发布订阅模式是在问什么?
- 面试官:请实现一个通用函数把 callback 转成 promise
- 空中悬停、翻滚转身、成功着陆,我用强化学习「回收」了SpaceX的火箭
- 中山大学林倞解读视觉语义理解新趋势:从表达学习到知识及因果融合