windows下多目录makefile demo讲解(VSCODE)

2024-05-27 21:48

本文主要是介绍windows下多目录makefile demo讲解(VSCODE),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1.前提
首先可以下载TDM-GCC或者Mingw-w64,然后找到make.exe的位置,可以将如下名字复制一份改成make.exe方便使用,记得加入环境变量。
在这里插入图片描述
2.代码目录:
在这里插入图片描述
每个文件均实现打印,方便证实最后生成出来的exe运行结果。

#include "bb.h"
#include <iostream>
using namespace std;void bb::funcbb()
{cout << "funcbb" << endl;
}

3.makefile:

CXX = g++
CXXFLAGS = -g COMPILE.CXX = $(CXX) $(CXXFLAGS)##想编译的文件目录 
##手动输入:所有目录及子目录都需加上
#SRC_DIRS  = ../a ../a/aa ../a/bb ../b 
##递归遍历:3级
SRC_DIRS := $(shell find ../a -maxdepth 3 -type d) $(shell find ../b -maxdepth 3 -type d) 
##EX_FILES即想排除的文件
EX_FILES = ../a/aa/exa.cpp ../a/bb/exb.cpp##foreach 遍历想编译的源目录,wildcard 获取目录下所有文件并加上后缀.cpp(语法上是为.cpp加上前缀,前缀为目录下的文件名,即为文件加后缀)
SRC_FILES  = $(filter-out ${EX_FILES}, $(foreach dir, $(SRC_DIRS), $(wildcard $(addprefix $(dir)/*, .cpp))))TARGET = main
#basename 返回一个字符串 . 之前的所有字段,即去掉后缀,同时addsuffix 加上后缀.o
OBJS = $(addsuffix .o, $(basename $(SRC_FILES)))#通配符 @:目标文件,^:所有的依赖文件,<:第一个依赖文件
#-c:生成xxx.o的目标文件 -o:生成可执行程序的目标文件
$(OBJS):%.o:%.cpp$(COMPILE.CXX) -c $^ -o $@${TARGET}:${OBJS}$(COMPILE.CXX) -o ${TARGET} ../main/main.cpp $(OBJS)#.PHONY跟随的代表虚拟目标,不需要clean文件存在
.PHONY: clean
clean:rm $(OBJS) ${TARGET}.exe

4.运行结果

xxxxxxxxxx MINGW64 /c/Code/C++/CMakeTest/cmake
$ make main
g++ -c -g  ../a/a.cpp -o ../a/a.o
g++ -c -g  ../a/aa/aaa.cpp -o ../a/aa/aaa.o
g++ -c -g  ../a/aa/aa.cpp -o ../a/aa/aa.o
g++ -c -g  ../a/bb/bb.cpp -o ../a/bb/bb.o
g++ -c -g  ../b/b.cpp -o ../b/b.o
g++ -g  -o main ../main/main.cpp ../a/a.o ../a/aa/aaa.o ../a/aa/aa.o ../a/bb/bb.o ../b/b.oxxxxxxxxxx MINGW64 /c/Code/C++/CMakeTest/cmake
$ ./main.exe
main
funca
funcaa
funcaaa
funcbb
funcb
endxxxxxxxxxx MINGW64 /c/Code/C++/CMakeTest/cmake
$ make clean
rm ../a/a.o ../a/aa/aaa.o ../a/aa/aa.o ../a/bb/bb.o ../b/b.o main.exe

这篇关于windows下多目录makefile demo讲解(VSCODE)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1008681

相关文章

Java调用C++动态库超详细步骤讲解(附源码)

《Java调用C++动态库超详细步骤讲解(附源码)》C语言因其高效和接近硬件的特性,时常会被用在性能要求较高或者需要直接操作硬件的场合,:本文主要介绍Java调用C++动态库的相关资料,文中通过代... 目录一、直接调用C++库第一步:动态库生成(vs2017+qt5.12.10)第二步:Java调用C++

Python基础文件操作方法超详细讲解(详解版)

《Python基础文件操作方法超详细讲解(详解版)》文件就是操作系统为用户或应用程序提供的一个读写硬盘的虚拟单位,文件的核心操作就是读和写,:本文主要介绍Python基础文件操作方法超详细讲解的相... 目录一、文件操作1. 文件打开与关闭1.1 打开文件1.2 关闭文件2. 访问模式及说明二、文件读写1.

C# WinForms存储过程操作数据库的实例讲解

《C#WinForms存储过程操作数据库的实例讲解》:本文主要介绍C#WinForms存储过程操作数据库的实例,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、存储过程基础二、C# 调用流程1. 数据库连接配置2. 执行存储过程(增删改)3. 查询数据三、事务处

Springboot处理跨域的实现方式(附Demo)

《Springboot处理跨域的实现方式(附Demo)》:本文主要介绍Springboot处理跨域的实现方式(附Demo),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不... 目录Springboot处理跨域的方式1. 基本知识2. @CrossOrigin3. 全局跨域设置4.

Linux修改pip临时目录方法的详解

《Linux修改pip临时目录方法的详解》在Linux系统中,pip在安装Python包时会使用临时目录(TMPDIR),但默认的临时目录可能会受到存储空间不足或权限问题的影响,所以本文将详细介绍如何... 目录引言一、为什么要修改 pip 的临时目录?1. 解决存储空间不足的问题2. 解决权限问题3. 提

Windows Server服务器上配置FileZilla后,FTP连接不上?

《WindowsServer服务器上配置FileZilla后,FTP连接不上?》WindowsServer服务器上配置FileZilla后,FTP连接错误和操作超时的问题,应该如何解决?首先,通过... 目录在Windohttp://www.chinasem.cnws防火墙开启的情况下,遇到的错误如下:无法与

Python解析器安装指南分享(Mac/Windows/Linux)

《Python解析器安装指南分享(Mac/Windows/Linux)》:本文主要介绍Python解析器安装指南(Mac/Windows/Linux),具有很好的参考价值,希望对大家有所帮助,如有... 目NMNkN录1js. 安装包下载1.1 python 下载官网2.核心安装方式3. MACOS 系统安

C++快速排序超详细讲解

《C++快速排序超详细讲解》快速排序是一种高效的排序算法,通过分治法将数组划分为两部分,递归排序,直到整个数组有序,通过代码解析和示例,详细解释了快速排序的工作原理和实现过程,需要的朋友可以参考下... 目录一、快速排序原理二、快速排序标准代码三、代码解析四、使用while循环的快速排序1.代码代码1.由快

VSCode中C/C++编码乱码问题的两种解决方法

《VSCode中C/C++编码乱码问题的两种解决方法》在中国地区,Windows系统中的cmd和PowerShell默认编码是GBK,但VSCode默认使用UTF-8编码,这种编码不一致会导致在VSC... 目录问题方法一:通过 Code Runner 插件调整编码配置步骤方法二:在 PowerShell

VSCode配置Anaconda Python环境的实现

《VSCode配置AnacondaPython环境的实现》VisualStudioCode中可以使用Anaconda环境进行Python开发,本文主要介绍了VSCode配置AnacondaPytho... 目录前言一、安装 Visual Studio Code 和 Anaconda二、创建或激活 conda