C++项目实战之makefile使用

C++多文件编程实战:从Hello World到模块化项目构建 在C++编程中,理解程序的组织结构是迈向工程化开发的关键一步。程序结构不仅关乎代码的可读性,更直接影响编译效率和项目可维护性。其核心原理在于分离声明与定义,通过头文件(.h/.hpp)提供接口声明,源文件(.cpp)实现具体功能,main函数作为程序入口。这种模块化设计的技术价值在于提升代码复用性、便于团队协作和降低维护成本。在实际应用场景中,无论是开发计算器、学生管理系统还是游戏引擎,良好的多文件组织都是基础。本文以**头文件**和**源文件**的协作为例,深入解析C++项目从单文件到多文件的演进过程,帮 阅读详情

makefile简介

一个工程中的源文件不计其数(一个项目有有很多的文件),现在的项目基本都是按模块进行划分的,而这些模块存放在若干目录中。

makefile中定义了一系列的规则(这些规则定义了一系列如何编译程序的操作,比如哪些文件需要编译、哪些临时文件需要及时的清除等),如此以来我们只需要通过make命令就可以一键编译源程序了。

所以常常说makefile带来的最大的好处就是"自动化编译",因为只需要一个make命令,整个工程完全自动编译,极大的提高了软件开发效率。(以上用于可能不规范,是作者的理解)

make简介

make是一个命令工具,它能够解释Makefile文件中的指令,一般来说大多数IDE都具备这样的功能。

makefile的编写的规则

makefile文件的命名:

makefile 或者 Makefile

makefile的规则:

三要素:目标   依赖    命令

格式==》

  • 目标:依赖
  • (TAB)命令

目标:最终要生成的文件(伪目标除外) 

依赖:生成目标所需要的文件或目标(这里的目标是子目标)

命令:通过执行命令来操作依赖来生成目标

我们来看一个例子

当前文件夹有如下5个文件

第一个版本的Makefile 

第二个版本我们添加以下子目标

添加子目标的目的:

  • make工作原理1

命令在执行前,需要先检查规则中的依赖是否存在

  • 如果存在,则执行命令
  • 如果不存在,则向下搜索,检查有没有一个规则的目标是这个依赖,
  • 如果存在则先执行这个子目标,先生成这个最终目标所需的依赖,
  • 那么我们有了依赖才可以生成最终目标

collect2: error: ld returned 1 exit status   
 
//为毛会出现这个问题,好像是子啊制作动态库的时候才会用这个问题

 

第三个版本我们通过自定义变量的方式

第四个版本我们通过makfile中的自动变量

第五个版本使用函数

makefile中主要使用的只要两个函数

wildcard  ==》查找指定目录下的指定文件  

src=$(wildcard ./*.c)

patsubst  ==》将指定目录下的什么文件后缀进行替换

obj=$(pastsubst ./%.c,./%.o,$(src))

第6个版本 加上仿函数

加上仿函数的目的:

对于makefile而言下面的规则全都是最终的目标提供服务的。

如果不是最终规则(第一个规则)所需要的依赖那么不会区执行。

但是通过伪目标就可以打破这个约定,一定会执行

利用makefile编译简单的C++工程 写在前面        一部分windows程序员可能对makefie这个词很陌生,简单来说makefile是Linux/Unix环境下用于描述整个工程编译和连接 阅读详情

相关推荐

Makefile文件编写与实战技巧

Makefile 的核心逻辑在于通过定义目标(Target)与依赖(Dependency)之间的关系,来控制构建流程的执行顺序和条件。理解目标与依赖的定义方式,是掌握 Makefile 构建机制的基础。本章将从最基础的目标依赖定义开始,逐步深入到多目标管理、伪目标(PHONY)的使用,以及构建清理目标 clean 的最佳实践,帮助读者在实际项目中高效构建构建系统。在 Makefile 中,目标通常是指一个文件名,或者是逻辑上的构建动作(如clean依赖。

weixin_42465332的博客 1091

跟我一起写 Makefile(十一)

make 的运行——————一般来说,最简单的就是直接在命令行下输入make命令,make命令会找当前目录的makefile来执行,一切都是自动的。但也有时你也许只想让make重编译某些文件,而不是整个工程,而又有的时候你有几套编译规则,你想在不同的时候使用不同的编译规则,等等。本章节就是讲述如何使用make命令的。一、make的退出码make命令执行后有三个退出码:    0 —

陈皓专栏 【空谷幽兰,心如皓月】 3万+

【WorkBuddy】WorkBuddy 智能体快速上手:从零到一的实践指南

文章摘要: 传统自动化脚本难以应对灵活多变的自然语言需求,导致逻辑复杂、维护成本高。智能体(Agent)通过理解语义意图、动态决策和松耦合组件解决了这些问题。WorkBuddy采用声明式配置,通过可视化界面定义意图、实体和对话策略,无需编码即可快速构建智能体。其核心组件包括意图分类、实体提取、对话策略、故事样本和回退机制,适用于客服支持、知识问答等高频场景。通过环境准备(Python/Node.js/Redis)和简单配置,用户可以快速搭建可运行的智能体,显著提升自动化效率。

ruiqideng的博客 1651

C/C++自动化编译工具Makefile的基本使用

本文主要为陈皓的《跟我一起写Makefile》读书笔记。 一,前言 笔者在初学C语言时使用的开发工具是VC++6.0,后来学习C++时,使用的是DEV-C++,再后来使用Visual Studio做软件开发。

DayDayUp 1万+

曙光服务器RAID配置避坑指南:MegaRAID SAS 9361-8i实战(含Foreign状态处理)

本文详细解析了曙光服务器搭配MegaRAID SAS 9361-8i控制器的RAID配置全流程,包括RAID0和RAID5的创建、Foreign状态处理及性能优化策略。特别针对磁盘迁移中的Foreign状态问题,提供了系统化的解决方案和高级恢复技巧,助力企业级IT运维提升存储配置的稳定性和可靠性。

weixin_29200741的博客 412

【目标检测】IoU(交并比)详解及代码实现

1. IOU概述        IoU的全称为交并比(Intersection over Union),是目标检测中使用的一个概念,IoU计算的是“预测的边框”和“真实的边框”的交叠率-,即它们的交集和并集的比值。最理想情况是完全重叠,即比值为1。 2. IoU计算        IoU等于“预测的边框”和“真实的边框”之间交集和并集的比值。IoU计算如下图,B1为真实

Roaddd的博客 2万+

c, c++用makefile编译工程

基本思路: 最外层有三个文件: Makefile, Make.share, Make.include. 每个工程目录中都有一个Makefile文件. 其中最外层的Makefile是外壳部分.需要调用者修改里面的某些参数,例如编译平台,要编译的子目录集合,每个工程都要用到的头文件,编译参数等,设置完成后,会进入每个子目录,执行当前子目录中的Makefile文件. Make.share和M

patdz的专栏 7769

实战避坑:基恩士KV8000 PLC与C#上位机链路通讯全流程实现(含ST代码+上位机源码)

本文详细讲解了基恩士KV8000 PLC与C#上位机的TCP链路通讯实现,从PLC端的ST代码编写、通讯配置,到上位机的通讯类封装、界面实现,再到实战避坑和性能优化,提供了完整的可复用方案。该方案已在实际产线项目中验证,支持实时数据采集和控制指令下发,稳定性和可靠性满足工业场景需求。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 1176

从零Makefile落地算法大项目

从零Makefile落地算法大项目

周同学的博客 2823

高空抛物监控系统:基于YOLOv8的轨迹追踪与可视化系统

本文详细介绍了一种基于YOLOv8深度学习模型的高空抛物监控系统,该系统能够实时检测并追踪高层建筑抛掷物的运动轨迹。文章包含完整的系统设计思路、算法实现细节、数据集构建方法以及基于PyQt5的可视化界面开发过程。我们提供了完整的Python实现代码,并讨论了系统的性能优化策略和实际部署考量。此外,我们还推荐了几个公开可用的高空抛物数据集,并详细分析了系统的应用前景和技术挑战。

YOLO 446

408 | 408常用计算公式与方法 —— 计组篇 汇总

408常用计算公式与方法 —— 计算机组成原理篇 汇总

"You are worthy! You can do it!" 4655

Makefile新手向教程:跟着+c同学step by step写makefile

前言 最近在写底层C代码需要用到makefile来简化编译流程并优化文件目录结构,一直没找到很好的makefile教程(一个通俗易懂的渐进式的教程),通过+c同学终于是找到了他在之前在学校实训的时候写的一篇文章,由于网站只能通过校内网查阅,在此决定分享一下,并留作个人往后学习查阅使用。 正文 原文名字:Makefile的使用 原文作者:DaddyTrap Makefile简介 ...

菇星獨行 2807

[deprecated]第九章:SVM机制: 9-2 Linux HMM原理与实现详解

Linux内核HMM(异构内存管理)子系统为异构计算平台提供统一内存管理机制,支持CPU与GPU等设备共享虚拟地址空间,实现零拷贝数据访问。其核心功能包括:1)统一虚拟地址空间,设备可直接访问CPU进程内存;2)实时页表同步与失效通知,确保地址空间一致性;3)支持设备端page fault处理;4)管理多种内存类型(系统内存、设备私有内存等)。HMM通过mmu_interval_notifier机制感知地址空间变化,提供标准API简化驱动开发,显著提升异构计算性能和数据传输效率。

图形/计算GPU的驱动与虚拟化技术分享园地 2547

Linux下使用make构建一个C++工程项目

原文:https://blog.youkuaiyun.com/qq_32599479/article/details/80864046 Linux下构建一个C++工程项目 在Windows系统下,我们可以使用Visual Studio等IDE帮助我们构建一个C++工程项目,本文在Linux系统环境中,使用make和vim构建一个C++工程项目 编译环境与工具 Ubuntu 14.04 g++ make ...

qq_33374294的博客 380

K8S部署Java项目(Gitlab CI/CD自动化部署终极版)

每个人都有惰性,但不断学习是好好生活的根本,共勉!

感谢阅读 6954

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

makefile的语法与优化

Makefile的基础语法 makefile 的注释类似py , 以#开头的行为注释行 #比如这样 变量的用法也类似py, = 来赋值,+= 来添加字符串 $(xx) 来取出xx的值 $@ 指代target $^ 指代 依赖列表 $< 指代 依赖列表的第一项 $(wildcard ./*.cpp) wildcard用来筛选下面来看个例子 在这里插入代码片 ...

咸鱼的日常划水 325

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

Linux Makefile 完全指南:从入门到实战的自动化构建利器

本文介绍了Linux下使用Makefile进行C/C++项目自动化构建的完整指南。从Makefile的基本概念和核心要素(目标、依赖、命令)出发,通过单文件和多文件项目的实战示例,详细讲解了如何编写高效的Makefile。文章重点阐述了变量定义、模式规则、自动变量等进阶技巧,以及伪目标、嵌套Makefile等实用方法。掌握这些知识可以帮助开发者简化编译流程,提升项目构建效率,适用于从简单工具到复杂项目的各种场景。通过实践应用这些技巧,开发者可以显著提高Linux环境下的开发效率。

bkspiderx的博客 935

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

第2课 - 初识makefile的结构

1. makefile 的意义 (1)makefile 用于定义源文件之间的依赖关系(在阅读开源软件源码时,可通过makefile掌握源码中各个文件之间的关系) (2)makefile 说明如何编译各个源文件并生成可执行程序。      2. makefile 的规则 (1)makefile 规则的定义     形式1:targets:prerequisites;command    ...

梦心之魂的博客 90

Makefile自动化编译实战项目完整指南

本文详细介绍了C/C++项目Makefile的编写方法,从基础到企业级应用。内容涵盖:1)项目结构组织;2)Makefile核心语法三要素;3)自动化文件发现与依赖管理;4)静态/动态库构建;5)多目录大型项目架构;6)并行编译与性能优化;7)跨平台支持;8)调试技巧与常见问题解决。通过实战示例展示了完整的Makefile实现,包括目录管理、版本控制、安装部署等企业级功能。最后推荐了进阶学习路径和工具链,帮助开发者构建高效、可维护的编译系统,显著提升项目构建速度与跨平台兼容性。

阿尔法星球的专栏 535

Linux就这个范儿 第8章 我是Makefile

Linux就这个范儿 第8章 我是Makefile P287 Makefile的作用就是——自动化编译,一旦写好,只需要一个make命令(解析Makefile,执行Makefile中描述的操作),整个工程就能完成自动编译,无论这个工程拥有多少个源代码文件。Makefile定义了一系列的规则,来指定哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作,因...

weixin_30652271的博客 200

详解Makefile, 使用make命令构建C/C++项目

在编写 Makefile 之前,首先需要配置好编译环境。本文示例将在 macOS 和 Linux 环境下使用 g++ 作为编译器,make 作为编译工具。如果你使用的是 Windows,可以通过安装 MinGW 或 WSL 来模拟 Linux 环境。操作系统macOS/Linux:这些系统默认会自带终端,可以直接运行 g++ 和 make。Windows:需要安装 MinGW 或使用 Windows Subsystem for Linux (WSL) 进行开发。安装 g++

海&的博客 3655

VS Code 使用 Makefile 运行 CPP项目

VS Code 使用 Makefile 运行 CPP项目

一杯水果茶!足矣~ 1648

【Linux】使用Makefile进行构建管理:如何编写和使用Makefile进行项目构建

Makefile 是一个强大的工具,用于自动化构建过程,特别是在C/C++项目中。它通过定义规则和依赖关系,简化了编译、链接和清理等操作。本文将介绍如何编写和使用Makefile进行项目构建,帮助你掌握Makefile的基本使用方法。

科技改变人类,技术成就未来 1422

由浅入深,教你使用Makefile编译C++文件

本文介绍什么是Makefile、Makefile的优势、Makefile的编写规则,采用一个示例由浅入深,教你使用Makefile编译C++文件。

weixin_44222088的博客 4831
下一篇: SpringMVC访问controller报错404的解决办法(总结超详细)
inuing
博客等级 码龄3年 23粉丝 3原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值