CMake

参考

https://www.bilibili.com/video/BV188411L7d2/?spm_id_from=333.999.0.0&vd_source=7155082256127a432d5ed516a6423e20

vscode 进阶
https://blog.csdn.net/weixin_41858148/article/details/125550122

概念

  • make工具

用于复杂项目多文件编译,相当于一个智能的批处理工具,本身没有编译和连接的功能,而是用类似于批处理的方式通过调用makefile文件中用户指定的命令来编译和连接

  • Makefile

Makfile文件中 包含了调用gcc/g++编译某个文件的命令

  • CMake

Makefile可以手写,也可以利用CMake工具根据CMakeLists.txt生成Makefile,然后再通过Make工具进行编译和连接

  • CMakeLists/Makefile

手写CMakeLists.txt文件,CMake根据CMakeLists.txt生成Makefile文件,然后编译工程

问题解决

vscode 使用原生make命令

https://blog.csdn.net/NiceToMeetUToo/article/details/101226888

  1. 进入MinGW\bin,把mingw32-make.exe改名为make.exe
  2. 不重命名,则在终端使用 mingw32-make 命令

makefile编写

## version1
# 源文件多的情况下,编写复杂
hello: main.cpp funcs.cpp # 生成一个hello目标 这个目标依赖于main.cpp funcs.cpp这些文件
	g++ -o hello main.cpp funcs.cpp 

## version2
CXX=g++ # 指定编译器
TARGET=hello2 # 指定生成的目标文件
OBJ=main.o funcs.o # 单个文件的编译文件

$(TARGET): $(OBJ) # TARGET文件依赖于OBJ文件 # 如果修改了文件,则使用下面命令进行重新编译 相当于变量替换
	$(CXX) -o $(TARGET) $(OBJ) 
main.o: main.cpp # 定义依赖关系
	$(CXX) -c main.cpp 

funcs.o: funcs.cpp
	$(CXX) -c funcs.cpp

## version3
CXX=g++ # 指定编译器
TARGET=hello3 # 指定生成的目标文件
OBJ=main.o funcs.o # 单个文件的编译文件

CXXFLAGS=-c -Wall # -Wall 输出所有等级的警告 而CXXFLAGS=-c则值报告错误等级
$(TARGET): $(OBJ) # TARGET文件依赖于OBJ文件 # 如果修改了文件,则使用下面命令进行重新编译 相当于变量替换 $@等价于$(TARGET) $^等价于$(OBJ)
	$(CXX) -o $@ $^

%.o: %.cpp # $< ??? 什么作用
	$(CXX) $(CXXFLAGS) $< -o $@

.PHONY: clean
clean: # make clean 命令则执行下面的语句
	rm -f *.o $(TARGET)

## version4
CXX=g++ # 指定编译器
TARGET=hello4 # 指定生成的目标文件
SRC=$(wildcard *.cpp) # 源文件是所有的.cpp文件
OBJ=$(patsubst %.cpp,%.o,$(SRC)) # 将源文件替换为.o文件 作为每个目标文件

CXXFLAGS=-c -Wall # -Wall 输出所有等级的警告 而CXXFLAGS=-c则值报告错误等级
$(TARGET): $(OBJ) # TARGET文件依赖于OBJ文件 # 如果修改了文件,则使用下面命令进行重新编译 相当于变量替换 $@等价于$(TARGET) $^等价于$(OBJ)
	$(CXX) -o $@ $^

%.o: %.cpp # $< ??? 什么作用
	$(CXX) $(CXXFLAGS) $< -o $@

.PHONY: clean
clean: # make clean 命令则执行下面的语句
	rm -f *.o $(TARGET)

编译

仅用makfile的编译步骤

> make .

cmakelists.txt编写

cmake_minimum_required(VERSION 3.10) 

project(hello7)

add_executable(hello7 main.cpp funcs.cpp)

编译

cmake+makfile的编译步骤

> cmake -B ./build -G "MinGW Makefiles" 
> cd ./build # 出现了makefile 还有可能出现.exe 如果没有出现则还要make一下
> make .
> ./main.exe
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值