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

相关文章

python在word中插入目录和更新目录实现方式

《python在word中插入目录和更新目录实现方式》文章主要介绍了如何在Word文档中插入和更新目录,并提供了具体的代码示例,插入目录时,需要使用`TablesOfContents`对象,并设置使用... 目录1、插入目录2、更新目录总结1、插入目录需要用到对象:TablesOfContents目录的

PostgreSQ数据库实现在Windows上异地自动备份指南的详细教程

《PostgreSQ数据库实现在Windows上异地自动备份指南的详细教程》这篇文章主要为大家详细介绍了如何在Windows系统上实现PostgreSQL数据库的异地自动备份,文中的示例代码讲解详细,... 目录前期准备实现步骤步骤一:创建备份脚本步骤二:配置免密登录(可选但推荐)步骤三:设置任务计划程序步

VSCode开发中有哪些好用的插件和快捷键

《VSCode开发中有哪些好用的插件和快捷键》作为全球最受欢迎的编程工具,VSCode的快捷键体系是提升开发效率的核心密码,:本文主要介绍VSCode开发中有哪些好用的插件和快捷键的相关资料,文中... 目录前言1、vscode插件1.1 Live-server1.2 Auto Rename Tag1.3

MySQL数据目录迁移的完整过程

《MySQL数据目录迁移的完整过程》文章详细介绍了将MySQL数据目录迁移到新硬盘的整个过程,包括新硬盘挂载、创建新的数据目录、迁移数据(推荐使用两遍rsync方案)、修改MySQL配置文件和重启验证... 目录1,新硬盘挂载(如果有的话)2,创建新的 mysql 数据目录3,迁移 MySQL 数据(推荐两

windows下安装Nginx全过程

《windows下安装Nginx全过程》文章介绍了HTTP和反向代理服务器的概念,包括正向代理和反向代理的区别,并详细描述了如何安装和配置Nginx作为反向代理服务器... 目录概念代理正向代理反向代理安装基本属性nginx.conf查询结构属性使用运行重启停止总结概念是一个高性能的HTTP和反向代理we

SQL Server中行转列方法详细讲解

《SQLServer中行转列方法详细讲解》SQL行转列、列转行可以帮助我们更方便地处理数据,生成需要的报表和结果集,:本文主要介绍SQLServer中行转列方法的相关资料,需要的朋友可以参考下... 目录前言一、为什么需要行转列二、行转列的基本概念三、使用PIVOT运算符进行行转列1.创建示例数据表并插入数

C++,C#,Rust,Go,Java,Python,JavaScript的性能对比全面讲解

《C++,C#,Rust,Go,Java,Python,JavaScript的性能对比全面讲解》:本文主要介绍C++,C#,Rust,Go,Java,Python,JavaScript性能对比全面... 目录编程语言性能对比、核心优势与最佳使用场景性能对比表格C++C#RustGoJavapythonjav

C#实现插入与删除Word文档目录的完整指南

《C#实现插入与删除Word文档目录的完整指南》在日常的办公自动化或文档处理场景中,Word文档的目录扮演着至关重要的角色,本文将深入探讨如何利用强大的第三方库Spire.Docfor.NET,在C#... 目录Spire.Doc for .NET 库:Word 文档处理利器自动化生成:C# 插入 Word

在C#中调用Windows防火墙界面的常见方式

《在C#中调用Windows防火墙界面的常见方式》在C#中调用Windows防火墙界面(基础设置或高级安全设置),可以使用进程启动(Process.Start)或Win32API来实现,所以本文给大家... 目录引言1. 直接启动防火墙界面(1) 打开基本防火墙设置(firewall.cpl)(2) 打开高

基于Python实现局域网内Windows桌面文件传输

《基于Python实现局域网内Windows桌面文件传输》这篇文章介绍了如何使用Python实现一个局域网文件传输系统,包括发送端和接收端的代码示例,发送端和接收端都需要在同一局域网内运行,并且确保防... 目录发送端代码 (sender.py)接收端代码 (receiver.py)图形界面版本 (可选)使