首页 > 其他分享 >make学习

make学习

时间:2022-12-15 22:46:21浏览次数:56  
标签:%. TARGET CXX make 学习 clean cpp main

make学习,参考「Makefile 20分钟入门,简简单单,展示如何使用Makefile管理和编译C++代码

程序见:https://github.com/ShiqiYu/CPP/tree/main/week03/examples/lab

文件结构

image-20221215214542623

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文件列表
  • 将(SRC)目录下的所有.cpp文件替换成.o文件
    • 「patsubst」也是一个扩展通配符,语法:$(patsubst %.c,%.o,$(wildcard *.c)),表示替换
  • 更多参考:https://blog.csdn.net/m0_46535940/article/details/125086502

参考

1、http://www.freecplus.net/b7a1c199959f4349b2a98874864a2000.html

标签:%.,TARGET,CXX,make,学习,clean,cpp,main
From: https://www.cnblogs.com/pam-sh/p/16986168.html

相关文章

  • 一个开源的个人学习计算机科学知识成长记录(前后端,数据结构与算法)
    菜鸟进阶​​一个适合自学与巩固的学习记录​​​​前端项目积累​​​​前端入门​​​​HTML​​​​CSS​​​​JavaScript​​​​Browser​​​​Node​​​​DOM​​......
  • 系统学习Python——单元测试unittest:测试报告
    分类目录:​​《系统学习Python》总目录​​相关文章:·单元测试unittest:框架结构·单元测试unittest:测试固件·单元测试unittest:编写测试用例·单元测试unittest:执......
  • C++学习---cstdio的源码学习分析05-打开文件函数fopen
    cstdio中的文件访问函数stdio.h中定义了一系列文件访问函数(fopen,fclose,fflush,freopen,setbuf,setvbuf),接下来我们一起来分析一下fopen对应的源码实现。fopen:打开文件fclose:关......
  • numpy 学习随笔 (array)
    numpy.array(object, dtype=None, copy=True, order='K', subok=False, ndmin=0)numpyarray方法主要用于生成矩阵,下面对array的参数进行逐个讲解。dtype:是矩......
  • Java学习-数据类型
    Java为强类型语言,所有变量都需要先定义,再使用。Java数据类型分类Java数据类型分为两个大类基本类型(PrimitiveType)基本类型分为数值类型和布尔(Boolean)类型数值类......
  • AD学习
    https://space.bilibili.com/586684152/video?tid=0&page=3&keyword=&order=pubdate1.域用户漫游:用户在一台机器上的配置和文件,换个登录机,还能存在。后续修改的内容,会自行......
  • Opencv3.4.10 (CMake 编译)windows
    准备工作:下载opencv以及opencv_contrib(包括一些附加功能)源码或opencv下载(下载后解压即可)opencv_contrib下载(下载后解压即可)cmake下载安装MinGW下载(下载后解......
  • 深度学习的初学者用哪本书比较好的?
    OverridetheentrypointofanimageIntroducedinGitLabandGitLabRunner9.4.Readmoreaboutthe extendedconfigurationoptions.Beforeexplainingtheav......
  • 学习c/c++应该看得书and怎么学习c/c++
    先来说说怎么学习c/c++的,再推荐学习必看书籍:一、想学习c/c++的人绝对不会是富二代,如果是,那证明这个人已经不是一个正常人了。如果你想把c/c++学的非常好的人必须变成一个非......
  • c/c++学习过程中的知识点记录:学习笔记(一)
    学习的过程就是一个一个小的知识点累加的过程,学会一个就在此记录一个。时间长了就知道的就多了,还可以用来温习自己学过的知识。一、return语句不可返回栈指针(指向栈内存的......