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

相关文章

Vite 打包目录结构自定义配置小结

《Vite打包目录结构自定义配置小结》在Vite工程开发中,默认打包后的dist目录资源常集中在asset目录下,不利于资源管理,本文基于Rollup配置原理,本文就来介绍一下通过Vite配置自定义... 目录一、实现原理二、具体配置步骤1. 基础配置文件2. 配置说明(1)js 资源分离(2)非 JS 资

Unity新手入门学习殿堂级知识详细讲解(图文)

《Unity新手入门学习殿堂级知识详细讲解(图文)》Unity是一款跨平台游戏引擎,支持2D/3D及VR/AR开发,核心功能模块包括图形、音频、物理等,通过可视化编辑器与脚本扩展实现开发,项目结构含A... 目录入门概述什么是 UnityUnity引擎基础认知编辑器核心操作Unity 编辑器项目模式分类工程

Python如何实现高效的文件/目录比较

《Python如何实现高效的文件/目录比较》在系统维护、数据同步或版本控制场景中,我们经常需要比较两个目录的差异,本文将分享一下如何用Python实现高效的文件/目录比较,并灵活处理排除规则,希望对大... 目录案例一:基础目录比较与排除实现案例二:高性能大文件比较案例三:跨平台路径处理案例四:可视化差异报

创建springBoot模块没有目录结构的解决方案

《创建springBoot模块没有目录结构的解决方案》2023版IntelliJIDEA创建模块时可能出现目录结构识别错误,导致文件显示异常,解决方法为选择模块后点击确认,重新校准项目结构设置,确保源... 目录创建spChina编程ringBoot模块没有目录结构解决方案总结创建springBoot模块没有目录

MySQL连表查询之笛卡尔积查询的详细过程讲解

《MySQL连表查询之笛卡尔积查询的详细过程讲解》在使用MySQL或任何关系型数据库进行多表查询时,如果连接条件设置不当,就可能发生所谓的笛卡尔积现象,:本文主要介绍MySQL连表查询之笛卡尔积查... 目录一、笛卡尔积的数学本质二、mysql中的实现机制1. 显式语法2. 隐式语法3. 执行原理(以Nes

Linux系统中查询JDK安装目录的几种常用方法

《Linux系统中查询JDK安装目录的几种常用方法》:本文主要介绍Linux系统中查询JDK安装目录的几种常用方法,方法分别是通过update-alternatives、Java命令、环境变量及目... 目录方法 1:通过update-alternatives查询(推荐)方法 2:检查所有已安装的 JDK方

RabbitMQ消费端单线程与多线程案例讲解

《RabbitMQ消费端单线程与多线程案例讲解》文章解析RabbitMQ消费端单线程与多线程处理机制,说明concurrency控制消费者数量,max-concurrency控制最大线程数,prefe... 目录 一、基础概念详细解释:举个例子:✅ 单消费者 + 单线程消费❌ 单消费者 + 多线程消费❌ 多

从入门到进阶讲解Python自动化Playwright实战指南

《从入门到进阶讲解Python自动化Playwright实战指南》Playwright是针对Python语言的纯自动化工具,它可以通过单个API自动执行Chromium,Firefox和WebKit... 目录Playwright 简介核心优势安装步骤观点与案例结合Playwright 核心功能从零开始学习

Windows环境下解决Matplotlib中文字体显示问题的详细教程

《Windows环境下解决Matplotlib中文字体显示问题的详细教程》本文详细介绍了在Windows下解决Matplotlib中文显示问题的方法,包括安装字体、更新缓存、配置文件设置及编码調整,并... 目录引言问题分析解决方案详解1. 检查系统已安装字体2. 手动添加中文字体(以SimHei为例)步骤

Linux下删除乱码文件和目录的实现方式

《Linux下删除乱码文件和目录的实现方式》:本文主要介绍Linux下删除乱码文件和目录的实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录linux下删除乱码文件和目录方法1方法2总结Linux下删除乱码文件和目录方法1使用ls -i命令找到文件或目录