MAKEFILE 学习笔记 —— 实用功能

makefile学习笔记 Makefile是一个用于构建软件的文件,其中包含了一系列规则和命令。本文讲述了makefile 的通用介绍:执行过程、概念、变量以及函数等。重点介绍了层次化的 Makefe 的两种编写方式,并配有实际可运行的Makefile的示例。 阅读详情

MAKEFILE 学习笔记 —— 实用功能


一. 变量的使用

当我们的程序越来越复杂时,变量的使用可以大大提高我们的效率。makefile 中变量的使用有点类似于 c 语言中的宏,格式如下
name = file
使用变量时应该加上$(),代码如下所示
obj = main.o func.o
aaa:    $(obj)
    gcc -o aaa  main.o  func.o
main.o: main.c  ex2.h
    gcc -std=c99 -c main.c
func.o: func.c  ex2.h
    gcc -std=c99 -c func.c

clean:
    rm -fr $(obj) aaa
  • name:变量的名字,如以上代码中的 obj
  • file :变量所代表的文件名 如以上代码中的 main.o func.o

二. make的自动推导

在我们使用make进行编译链接时,像以上示例的代码不免有些麻烦,而 make 有一个自动推导的功能可以大大提高工作效率。即,当 make 发现一个 .o 文件时,便会自动将其所依赖的 .c 文件加载进来,这被称为自动推导,这也被称为 make 的隐晦规则。如下示例便是上面那个例子的 make 自动推导版。
obj = main.o func.o
aaa:    $(obj)
    gcc -o aaa  main.o  func.o
main.o:     ex2.h
func.o:     ex2.h

clean:
    rm -fr $(obj) aaa

三. 共用.h文件

当我们的许多 .c 文件共用一个 .h 文件时,每次都写入同一个 .h 文件未免太麻烦,这里有一个精简的方法,即共用 .h 文件,如下代码:
obj = main.o func.o
aaa:    $(obj)
    gcc -o aaa  main.o  func.o
main.o func.o:      ex2.h

clean:
    rm -fr $(obj) aaa
如以上代码,将共用同一个 .h 文件的目标文件写在同一行内即可。

四. 打扫

当我们编译完程序之后,便要清理一下所生成的那些链接文件。如下代码
obj = main.o func.o
aaa:    $(obj)
    gcc -o aaa  main.o  func.o
main.o func.o:      ex2.h

.PHONY: clean
clean :
    -rm -fr $(obj) aaa
  • PHONY: clean 是声明 clean 是伪目标
  • rm 之前的 “-” 是告诉 make 若编译时遇到错误,不用管,继续向下编译。

参考文献

[1] 陈浩《跟我一起写Makefile》

【Linux学习笔记】makefile学习笔记(四) 上一篇:makefile学习笔记(三)介绍了makefile的多目标规则、多规则目标、静态模式规则和伪目标。本节将介绍makefile的更多内容。 1. 命令 命令的回显 通常,make在执行命令行之前会把要执行的命令行进行输出,这就是命令的回显。如以下makefile所示: all: echo "Hello csdn!" 在执行make时输出: $ make echo "Hel... 阅读详情

相关推荐

makefile 学习笔记

在文档里面总结了一些编写makefile时使用到的关键字解释和用法,如CC_CMD = -fpic -c 把make编译信息写入到文件,希望对大家有用。

Makefile教程

工程实例 工程目录 automake.sh #前面可以创建一些目录啥的 # 获取第一个参数,可以删除所有的中间件重新编译 One_Flag=$1 if [ "clean" == "$One_Flag" ]; then rm -rf $PrjDir/Output/Exe/* rm -rf $PrjDir/Output/Obj/*.o exit 1 fi # 将标准 Makefile 文件复制到每个不含该文件的 SoftDir for a_dir in $(find $SoftDir

qq_43491149的博客 1920

大疆OcuSync vs 传统2.4GHz:深度拆解无人机图传射频模块的硬件差异

本文深度对比了大疆OcuSync与传统2.4GHz无人机图传射频模块的硬件差异,涵盖芯片组、天线系统、PCB设计、散热方案及生产测试等核心环节。重点解析OcuSync的全定制SoC芯片、智能MIMO天线阵列及精密PCB布局如何实现革命性性能提升,为无人机图传技术发展提供专业参考。

u5v6w7的博客 806

Linux编译器-gcc/g++使用、Linux项目自动化构建工具-make/makefile

想象一下一个很大的项目,有上千个源文件,编译一次就需要半个小时,当只修改了一小部分程序时,每次调试都将所有的源文件再次编译这样效率太低,对于没有做改动的源文件不需要再次编译,只需将修改了的源文件编译就可以了。2、浪费资源(每用到标准库中的方法时,就需要将标准库中的方法拷贝到自己的程序中,这样造成可执行程序变大,程序加载到内存中时会占用更多的内存)对test.i文件来说进行编译。标准库中是函数的实现,而对应的头文件中包含了相应的声明,通过头文件就知道标准库中有那些方法、方法的参数列表、方法的返回值。

qq_73991712的博客 1112

AI中台系统设计方案探讨

集成JupyterLab、低代码建模工具(如H2O.ai)、预训练模型库(Hugging Face、PaddleHub)。:通过REST/gRPC接口封装AI能力(如OCR、语音识别),支持流量控制与鉴权(如Kong、Apigee)。:服务注册发现(Consul)、熔断降级(Hystrix)、监控告警(Prometheus+Grafana)。:分布式存储(如HDFS、Ceph)与对象存储(如S3、OSS),支持海量数据高速读写。加密传输(TLS)、动态脱敏(如数据掩码)、访问控制(RBAC)。

reset2021的博客 1033

保姆级避坑指南:在Ubuntu 22.04上用ROS2 Humble搞定TurtleBot3的SLAM与导航(附5个常见报错解决方案)

本文提供了一份详细的Ubuntu 22.04上使用ROS2 Humble和TurtleBot3进行SLAM建图与导航的避坑指南,涵盖Gazebo启动失败、场景加载问题、环境变量设置、GLIBCXX版本冲突及Nav2参数配置等5个常见报错的解决方案,帮助开发者高效完成机器人导航项目。

weixin_29062823的博客 286

Gcc与Make编译C/C++学习

在linux环境下 编译C/C++文件需要使用gcc或者make的编译软件进行编译       编译有三个过程:预编译---->编译----->链接    预编译的过程就是将c/c++文件的头文件包含到代码的过程  编译就是将文件变成机器代码  链接就是将代码中使用的各个函数库的机器代码进行链接变成可执行文件      1:首先学习预编译 gcc -o out.c -E src.c

2359Coding 1404

RPN 解析

RPN全称是Region Proposal Network,Region Proposal的中文意思是“区域选取”,也就是“提取候选框”的意思,所以RPN就是用来提取候选框的网络; 1. RPN的意义 RPN第一次出现在世人眼中是在Faster RCNN这个结构中,专门用来提取候选框,在RCNN和Fast RCNN等物体检测架构中,用来提取候选框的方法通常是Selective Se

lanran2的博客 10万+

Makefile入门(四)

Makefile入门(四)

wupeng4389151的博客 1763

从RadixTree到哈希表:深入对比SGLang和vLLM的Prefix Cache实现差异

本文深入对比了SGLang与vLLM在大语言模型推理服务中实现Prefix Cache(前缀缓存)的两种核心方案。SGLang采用基于Radix Tree的RadixAttention,支持任意长度前缀的精确匹配与灵活复用;vLLM则采用基于哈希表的方案,深度集成于PagedAttention,实现简洁但要求块级精确对齐。文章剖析了二者在设计哲学、内存管理、适用场景及集群级优化(如Prefix Cache Aware Routing)上的关键差异,为高性能LLM服务的技术选型提供决策依据。

blockchain9miner的博客 956

使用CUDA进行按流排序的内存分配的示例程序

在GPU编程中,按流排序的内存分配是一种常见的优化技术,它可以提高内存访问的效率。通过将内存分配与特定的CUDA流相关联,可以确保在GPU上的并发操作期间,内存分配操作与其他GPU计算操作同时进行,从而减少了潜在的内存访问延迟。请注意,上述示例中的代码仅供参考,并可能需要根据实际需求进行修改和调整。此外,为了完整性,我们省略了一些细节,例如主机指针的分配和释放,以及错误处理和错误检查等。在该示例中,我们创建了4个CUDA流,并使用内存池进行内存分配。然后,我们在每个流上执行了相应的内存访问操作,并使用。

Byte_O_O的博客 282

Makefile学习-13预定义宏

在Makefile中控制选择“gcc -c -o $@ $

u010743406的博客 1366

【AI产品与商业航图】Flux.1 完全开源 AI 绘图模型:本地部署与 ComfyUI 实战指南

Flux.1是一个开源项目,用户可以自由使用和修改,完全免除使用费用。🖥️本地部署支持:与一些依赖云端计算的工具不同,Flux.1支持本地部署,确保用户可以离线使用并自主控制数据隐私。🔄兼容ComfyUI框架:Flux.1可以无缝集成到ComfyUI中,用户可以享受更加简便和直观的操作界面。🎨卓越的图像生成能力:Flux.1能够生成高质量、细腻的图像,支持多种风格与创作主题的切换。💾低硬件要求。

高校图书馆高级系统架构师/研究馆员,推动高校AI从概念演示到可评审、可交付、可运维:路线图与立项评审、PoC交付、评测回归与上线运维(Baseline/Eval/Ops)。 1737

【c++ Makefile】Makefile 学习笔记

Makefile学习笔记

QIN_student的博客 744

YOLO26涨点改进 | 检测头改进篇 | 利用ASFF改进YOLO26检测头,自适应空间特征融合模块,在所有的目标检测上均有大幅度的涨点效果

本文提出了一种自适应空间特征融合(ASFF)检测头YOLO26,用于解决目标检测中特征金字塔跨尺度特征不一致的问题。ASFF通过学习空间权重图,自适应地融合不同尺度的特征,抑制特征层间的冲突信息。实验表明,该方法在MSCOCO数据集上显著提升了检测精度(45FPS下AP达42.4%),且仅引入极小推理开销。ASFF模块具有可微分性、模型无关性和计算成本低等优势,能够有效改善特征尺度不变性,实现速度与精度的良好平衡。文章详细介绍了ASFF的原理、实现代码及其在YOLO模型中的集成方法。

Ai缝合怪、助力小伙伴高效发论文 553

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

makefile学习笔记1

本系列是笔者学习makefile所做的笔记,这是第一篇,后续的会持续更新

weixin_48495360的博客 1110

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

Makefile的学习笔记

1    Makefile GNU make的工作分为两个阶段。在第一阶段,make读取makefile文件、内置变量及其值、隐含规则和具体规则、构造所有目标的依赖关系以及所有目标各自的依赖等。在第二阶段,make决定需要重新构造的目标并使用必要的规则进行工作。 make工作第一阶段发生的扩展是立即扩展,直接把变量和函数扩展为makefile文件语句的一部分。make工作第二阶段发生的扩展称为

edisonlg的专栏 2万+

IMSL CNL 7.0.0 (x86-64)Crack

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

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

Makefile学习笔记

本笔记总结了makefile简介、makefile变量、makefile函数的相关内容,并给出了一个makefile示例。

qq_44667259的博客 1024

学习笔记——Makefile基础及入门1

文章为本人的Makefile学习记录,罗列了Makefile中一些必要掌握与常用的知识点,希望和大家一起学习共同进步

ZW_finder的博客 1270

Makefile学习笔记目录

Makefile学习笔记目录 Makefile学习笔记01|前言 Makefile学习笔记02|动手编写第一个Makefile Makefile学习笔记03|g++编译的四个步骤 Markfile学习笔记04|Makefile运行流程与变量 Makefile学习笔记05|自动推导与伪目标 Makefile学习笔记06|编译动态链接库 Makefile学习笔记07|编译静态库并通过ifeq语句 ...

qq_43608728的博客 677

makefile 基础学习笔记

makefile 基础学习笔记1.makefile 的书写格式2.一步一步书写makefile3.makefile常用函数介绍4.总结5.参考 1.makefile 的书写格式   根据 官方的GNU Make手册,一个简单的makefile文件书写规则如下所示: target ... : prerequisites ... recipe ... ...   target: 可以是可执行文件(executable files)或者是目标文件(object fles)   prerequisit

上帝的骰子 1253

[工具使用:Makefile] Makefile学习笔记

如果执行总控 Makefile 时,make 命令带有参数或者在上层的 Makefile 中定义了这个变量,那么 MAKEFLAGS 变量的值将会是 make 命令传递的参数,并且会传递到下层的 Makefile 中,这是一个系统级别的环境变量。它会继续载入其它的文件,一旦完成makefile的读取,make会再重试这些没有找到,或是不能读取的文件,如果还是不行,make才会出现一条致命信息。当使用 make 的选项 “-C” 的时候,命令就会进入指定的目录中,然后此变量就会被重新赋值。

stm32stu的博客 3275
上一篇: MAKEFILE学习笔记--简介
下一篇: 数据结构与算法笔记 —— 绪论
HorizontalView
博客等级 码龄11年 9粉丝 29原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值