多目录Makefile编写

掌握多目录Makefile编写技巧 Makefile是编程中用于自动化构建和编译程序的脚本文件,它定义了项目中的编译规则和依赖关系。掌握Makefile对于软件开发人员来说,能够显著提高项目的编译效率和维护性。在Makefile的规则定义中,目标(target)、依赖(dependencies)和命令(commands)是构成规则的三大要素。目标通常是需要被创建的文件名,依赖则是生成目标所需的其他文件,而命令则是创建目标时需要执行的动作。理解这三个概念是编写有效Makefile的关键。目标(target) 阅读详情

         对于在Linux下编程来说,编写一个好的Makefile是非常重要的,写好了可以给编译带来极大的便利。而网上对于多目录下Makefile的编写讲解的非常少, 有很多都不能达到目的。这里参考了网上一篇Makefile,它是针对C语言的,写的挺不错。我将它改了一下,用于编译C++的Makefile。

参考链接在这里

https://blog.youkuaiyun.com/xiaoluoshan/article/details/78639961

1. 我的目录结构

>> common-存放一些公共的头文件。

>> debug-存放bin目录和obj目录,bin存放编译的最终可执行文件,obj存放生成的目录文件。

>> entity-存放实体的定义,包括头.h和.cpp文件。

>> include-存放项目的头文件。

>> network-存放socket通讯的封装。

>> protocols-协议解析的封装。

>> src-程序源文件,包括main函数实现在这里。

2. 最外层Makefile的编写,目录结构如图:

Makefile内容如下:

注意标红的地方,由于项目用到了c++11标准的一些东西,故加这个选项:-std=c++11。另外注意一下最后标红的这行的选项顺序。另外特别注意,如果最外层目录下有自己的目录不进入编译搜索,一定要使用awk排除排,否则编译会报错而中断。这一句:

SUBDIRS=$(shell ls -l | grep ^d | awk '{if($$9 != "debug") print $$9}')

如果有多个目录要排除,这里要加入排除的其它目录,这里仅排除debug目录。

3. debug目录Makefile编写,目录结构如图:

 Makefile内容如下:

这里我用到了libevent库以及多线程,所以加入了编译选项-levent –lpthread选项。

4. protocols目录Makefile.

由于其会引用外部头文件,所以Makefile中要加入包含路径,这样在程序代码中可以不用包括头文件的路径。Makefile文件格式如下:

注意这里,我加入了自己的头文件路径。再看代码调用的头文件引用:

#include "DataEntity.h"

引用了实体定义,不用带路径。

5.  其它目录Makefile

其它目录Makefile就基本都一样了,需要引用头文件就加入路径,其它项都一样:

6. 最后是一些Makefile编写注意混淆的地方。

(1)Makefile中的 符号 $@, $^, $< 的意思:

  $@  表示目标文件

  $^  表示所有的依赖文件

  $<  表示第一个依赖文件

  $?  表示比目标还要新的依赖文件列表

 

(2)wildcard、notdir、patsubst的意思:

  wildcard : 扩展通配符

  notdir : 去除路径

  patsubst :替换通配符

 

g++ *.o -o $@ -lpthread -levent

注意,指定链接成目标文件格式,.o目标文件一定要在前面,中间-o,最后才是最终生成的目标文件,位置不要调返了,否则编译不通过。

 

(3)  g++链接选项

-l+库名,表示链接库,如-lpthread表示链接pthread库,前面要加路径.

-levent表示需要连接libevent库。

-l  参数就是用来指定程序要链接的库,-l参数紧接着就是库名。

-L 参数跟着的是库文件所在的目录名。

-i (小写l)  编译程序到系统默认路进搜索,如果找不到,到当前目录,如果当前目录找不到,则到LD_LIBRARY_PATH等环境变量置顶的路进去查找,如果还找不到,那么编译程序提示找不到库。

 

 

 

 

 

 

 

Makefile编写指南:多目录结构下的自动化构建 Makefile是构建自动化工具Make的配置文件,它详细定义了如何编译和链接程序。一个基本的Makefile通常包括五个主要部分:目标(target)、依赖(dependencies)、命令(commands)、变量(variables)和注释(comments)。预定义变量是Make工具提供的内置变量,它们有特定的含义和用途。例如:CC:编译器的名称,默认为cc。CFLAGS:传递给C编译器的选项。CPPFLAGS:传递给C预处理器的选项。LDFLAGS。 阅读详情

相关推荐

CA51F3系列(国产)+低功耗模式

CA51F351P6芯片是基于1T 8051内核的8位微控制器,通常情况下,运行速度比传统的8051芯片快10倍,性能更加优越。内置8K Flash程序存储器,可多次重复编程的特性给用户开发带来了极大的方便。不仅保留了传统8051芯片的基本特性,还集成了12Bit ADC、LCD/LED驱动、Touch Key、16Bit PWM、 UART、RTC、低电压检测(LVD)等功能模块。支持IDLE、STOP和低速运行三种省电模式以适应不同功耗要求的应用。

WANGJIHUIwang的博客 572

Makefile简介及如何指定头文件和库文件

初学C/C++时,我们编译源文件时,通常直接敲命令去进行编译。但在实际项目中,源文件非常多,直接敲命令编译就不现实了,这时候就需要用到Makefile,Makefile是一个文本文件,我们只需要提前在Makefile中写好源文件的编译规则,然后直接执行make命令,就可以自动编译。

new9232的博客 1万+

贝叶斯神经网络(Bayesian Neural Network)

最近在研究贝叶斯神经网络,一些概念一直搞不清楚,这里整理一下相关内容,方便以后查阅。

梁小憨憨的博客 3656

Makefile单个及多个文件编译,路径引用,只讲干货不拖拉_00

显然,Makefile就无法搜索到了,这个需求是非常合理的,因为在我们开发中,通常会把头文件和.c文件分开归类,那么我们如何告知Makefile我们的log.h文件放在head目录下了呢?如图,我们要编译008_memset_s.c和memset_s.c两个文件,生成我们的edit,当然还包括了log.h和securecutil.h文件,log.h文件在head目录下,securecutil.h文件在safe_c_library目录下。如下图,我运行make指令,生成了对应的.o文件和edit终极目标。

qq_47325567的博客 2809

基于大模型的肾结石诊疗全流程风险预测与方案制定研究报告

目录一、引言1.1 研究背景与意义1.2 国内外研究现状1.3 研究目标与内容二、大模型技术原理与应用概述2.1 大模型的基本原理2.2 大模型在医疗领域的应用进展2.3 适用于肾结石预测的大模型选择与依据三、术前风险预测与准备3.1 患者身体状况评估3.2 结石情况分析3.3 术前准备方案制定四、术中风险预测与应对4.1 出血风险预测与处理4.2 脏器损伤风险预测与预防4.3 实时监测与决策支持五、术后恢复预测与护理5.1 恢复时间预测5.2 护理要点与措施5.3 并发症预防与处理六、并发症风险预测与管理

嵌入式毕设/课设资料清单(速查手册·文档模板·题库,持续更新)→ 见最新文章 1149

解码运动想象:BCI Competition IV 2a数据集实战指南

本文提供了BCI Competition IV 2a数据集的实战指南,详细解析了该经典运动想象脑电数据集的结构、文件格式与实验范式。通过MNE-Python等工具,逐步演示了从原始信号读取、预处理(通道选择、滤波、分段)到特征提取(CSP、频带功率)和模型训练(LDA、SVM)的完整流程,并强调了受试者独立评估的重要性,为BCI研究者提供了可复现的入门与进阶路径。

weixin_29304985的博客 365

C/C++ makefile 支持多目录、多文件批量化模版

最近因工作需要,要尝试徒手撸一份makefile文件,这份模版支持批量化,也不针对某一个C/CPP文件指定规则.....

Koma的主页 343

Multisim仿真运放积分器踩坑实录:为什么你的方波变不成三角波?

本文针对Multisim仿真运放积分器时方波无法转换为三角波的常见问题,提供了详细的排查与调试指南。文章指出,经典RC积分电路因直流反馈开路导致运放饱和,核心解决方案是在反馈电容两端并联大阻值电阻以稳定直流工作点。通过参数优化(调整Rin、C、Rf)和高级仿真技巧,手把手教你调出线性度好、幅度适中的完美三角波,并分享异常波形(如饱和、不对称、振荡)的对应策略。

weixin_29231263的博客 114

Makefile多个目录下的编译

otdir函数用于去除文件路径中的目录部分。

weixin_51338103的博客 1024

基于simulink的预测电流控制策略的三相逆变器仿真

本文详细介绍了在Simulink中实现基于预测电流控制策略的三相逆变器仿真方法。主要内容包括:准备工作(安装必要软件及工具箱)、构建三相逆变器基础模型、设计预测电流控制器(包含状态空间建模和控制器设计)、实现控制逻辑、添加示波器观察输出、配置仿真参数以及运行仿真分析结果。通过MATLAB代码示例和Simulink模块说明,展示了如何选择最优开关状态来最小化电流误差。该仿真方法为研究快速响应、高精度的逆变器控制提供了实用工具,但需注意实际应用中可能需要的调试工作。

amy_mhd的博客 276

菜鸟哥玩蓝牙Ble4.0系列 ESP32初玩篇③ Beacon —— 广播应用,室内定位,内容推送

文章目录1、前言1.1 什么叫做Beacon?1.2 Beacon使用场景1.3 Beacon协议落地实现2、ESP32 Beacon案例3、Beacon核心库 —— BLEBeacon、BLEEddystoneTLM、BLEEddystoneURL3.1 BLEBeacon3.2 BLEEddystoneTLM3.3 BLEEddystoneURL 授人以鱼不如授人以渔,目的不是为了教会你具体项目开发,而是学会学习的能力。希望大家分享给你周边需要的朋友或者同学,说不定大神成长之路有博哥的奠基石。。。

单片机菜鸟哥的博客 2万+

Linux进阶-Makefile

学习了Makefile变量,对先前的mp3进行加深。

weixin_47077788的博客 2390

Oracle EBS GL日记账批“选定以过账”状态数据修复

日记账来源:应收账款。用户操作过账以后,自动提交请求“过账:单一分类账”一直运行中,该请求执行5,6个小时甚至10多个小时无法完成,导致“标准管理器”阻塞大量请求待定,“冲突解决管理器”的待定数量不断增加。系统管理员不得不把该请求强制取消,此时,日记账批的状态处于“选定以过账”(GL_JE_BATCHES.STATUS为S),如下图 检查此日记账批有3千多条日记账题头,由于日记账比较多,日记账的科目余额计算需要大量服务器资源和执行时间比较长。

陈显平的专栏-Oracle EBS 3246

多目录下多文件 makefile编写

前面已经分享了单目录项下多文件的makefile的编写,现在来看看多目录下多文件makefile的编写;         在做项目时,一般文件都会分几个目录来存放;基本的是  include/  bin/ src/ obj/ lib/ tools/,这几个文件;我先说下我的文件存放目录,用ls -R可以查看到所有文件:./include/common.h    ./src/main.c    .

YuZhiHui_No1的专栏 1万+

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

linux--多目录下的MakeFile文件(嵌套Makefile)编写

linux--多目录下的makefile文件编写1 简介2 步骤3 示例3.1 文件根目录下的文件3.2 这个是工程中除了include,lib外的目录结构3.3 根目录下的makefile文件3.4 OBJ文件中的makefile3.5 CPE_54_08文件目录下的makefile3.6 Business文件下的makefile3.7 MXDatabase文件下的makefile3.8 Soc...

天道酬勤 8439

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

多目录时Makefile 的编写方法

多目录时Makefile 的编写方法1 make分中预定义变量表 $* 不包含扩展名的目标文件名称。 $+ 所有的依赖文件,以空格分开,并以出现的先后为序,可能包含重复的依赖文件。 $< 第一个依赖文件的名称。 $? 所有的依赖文件,以空格分开,这些依赖文件的修改日期比目标的创建日期晚。 $@

GeorgeGuo 1万+

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

【Linux】一步一步教你编写单目录和多目录Makefile

本文将介绍Makefile的作用、优势、原理以及一步一步编写单目录和多目录Makefile

logani的博客 2910

多文件及多目录下MakeFile文件的编写

Makefile 描述了整个工程中所有文件的编译顺序、编译规则。而make工具则可以对我们的Makefile规则进行解释执行。Makefile文件的规则包含了目标文件和依赖文件之间的依赖关系 以及更新此规则 所需要的命令: 目标文件:依赖文件 命令 其中,命令前是Tab不是空格,否则make会报错。首先,上一段Hello World的代码:/* test.c */ #include <st

麻雀飞吧的博客 1163

多目录、多文件的Makefile的编写

makefile多目录设计

qq_30247635的博客 5125

多文件多目录 Makefile文件编写

多文件多目录的Makefile文件编写 文件目录为: stu_sys |-- Makefile |-- include |   |-- other |   |   `-- other.h |   |-- student |   |   `-- student.h |   |-- student_public.h |   `-- teacher |

shouso888的专栏 1684

Linux Makefile多目录的编写

手头一个项目,需要编写项目的makefile 多目录结构: csource/ ├── common│ └── sqlite3├── inc│ ├── curl│ ├── lua│ └── Protection├── lib│ ├── arm│ └── linux├── obj├── out│ ├── arm│ └── linux├── src 源码目录s...

weixin_30300523的博客 197

多目录下的makefile文件编写

222

Stephen 6134

多目录Makefile文件编写

这是一个简单的Makefile文件,用于C语言项目的自动化构建。它定义了源代码目录(src)、头文件目录(include)、目标文件目录(obj)和可执行文件目录(bin)。Makefile自动查找src目录下的.c文件,生成对应的.o目标文件存放于obj目录,最终链接生成可执行文件到bin目录。编译选项包含调试信息(-g)、所有警告(-Wall)和头文件路径(-Iinclude)。同时提供了clean指令来清理生成的目标文件。该Makefile简化了C项目的编译过程,实现了自动化构建。

专注嵌入式开发与 Linux 系统应用实战,分享芯片驱动、设备调试、系统工具开发干货。 431

应用层多目录时Makefile 的编写方法

原址:https://blog.youkuaiyun.com/guoxiaojie_415/article/details/52206139多目录时Makefile 的编写方法1 make分中预定义变量表$* 不包含扩展名的目标文件名称。$+ 所有的依赖文件,以空格分开,并以出现的先后为序,可能包含重复的依赖文件。$&lt; 第一个依赖文件的名称。$? 所有的依赖文件,以空格分开,这些依赖文件的修改日期比目标...

hehu8的博客 384
上一篇: VMWare下CentOS7无法启动网络
下一篇: 从源码构建gcc交叉编译环境
ComputerInBook
博客等级 码龄19年 1168粉丝 464原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值