Makefile文件编写简单版教程

Makefile 编写简单教程 本教程将详细介绍 Makefile 的编写方法,包括基本概念、语法、变量、函数、规则以及复杂项目中的应用,并结合实际可执行的代码示例,帮助读者全面掌握 Makefile 的使用。简单赋值# 定义变量CC = gcc在简单赋值中,如果变量的值包含空格,必须使用引号将整个值括起来。追加赋值# 追加变量值追加赋值用于向现有变量添加值,+=操作符用于追加值而不替换现有值。条件赋值# 条件变量赋值endif条件赋值允许基于条件来设置变量的值。 阅读详情

本文旨在从零开始学习Makefile的编写,先了解make命令,后面再详细介绍Makefile文件的编写规则,日常不需要太复杂的makefile文件编写,所以本文的例子比较简陋~。

引入Makefile文件是因为工程项目中有很多文件,并且它们相互依赖,一个一个编译会很花时间,而且如果有某个文件修改过需要重新编译,那么所有相关的文件都要重新编译,这就很操蛋。Makefile文件是去判断哪个文件被修改了,然后会重新生成修改后的文件,而且只需要一个make命令,极大地简化了编译过程。

一、make及其用法

Makefile文件是一类工程管理工具的工程描述文件的默认名称,名称不一定是Makefile,也可以是makefile或GNUmakefile。

make命令会在执行路径中搜索Makefile文件,如果同时存在以上三个文件,执行顺序是GNUmakefile > makefile > Makefile,如果选择执行一个,其他的就不会再执行了。

如果想执行某个文件,只需要make -f 文件名就可以指定执行文件,-f也可以用--file=FILE 或 --makefile=FILE功能相同。

另一个常用命令选项是-d,用于调试Makefile文件,不过不是单步调试,而是在屏幕上输出Makefile文件的执行过程,另一种命令选项是--debug[=FLAGS]。

make命令详细参数通过make -h 或者 make --help来获取。

二、Makefile文件编写规则

首先给出测试代码,测试代码由两个cpp文件组成,a.cpp和b.cpp,b.cpp里面是一个加法函数add,a.cpp的主函数直接调用add函数。

a.cpp

#include<stdio.h>
#include"b.cpp"

int main()
{
    int a = 1;
    int b = 2;
    printf("%d\n",add(a,b));
    return 0;
}

b.cpp

#include<stdio.h>

int add(int a, int b)
{
    return a + b;
}

Makefile的基本语法:

目标1 目标2 目标3 ... : 条件1 条件2 条件3 ...

[tab]命令1

[tab]命令2

[tab]命令3

Makefile基础版本

all:test #最后的可执行程序test,无论书写顺序是怎样,最后是生成test
test:a.o #test是结果,a.o是来源
	#命令必须开头是tab键 -o后面生成目标
	g++ -o test a.o 
a.o:a.cpp #a.o是结果,a.cpp是来源
	#-c表示只编译不链接,生成.o文件
	g++ -c a.cpp -o a.o

输入make命令

[wanghe@localhost testmake]$ make
g++ -c a.cpp -o a.o #-c表示只编译不链接,生成.o文件
g++ -o test a.o #命令必须开头是tab键 -o后面生成目标
[wanghe@localhost testmake]$ ls
a.cpp  a.o  b.cpp  Makefile  test

Makefile进阶版本

问题引入,如果某个文件被多次引用,但是现在需要修改文件名,那么一个一个修改就会很麻烦,所以Makefile文件中允许定义变量,然后后面只需要修改变量的值就可以了,原理就是Makefile文件会展开变量,类似于宏定义。

变量定义规则 变量名 = 命令,使用变量是通过$(变量名)或者$(变量名)

Bin = test #定义变量名Bin
all:$(Bin) #生成可执行程序test
test:a.o
	g++ -o $(Bin) a.o
a.o:a.cpp
	g++ -c a.cpp -o a.o
clean:    #clean需要使用命令make clean才会执行
	rm -f *.o $(Bin)  #删除生成的.o文件和可执行文件

如果要修改文件名,只需要修改test就行了,这样就很方便。

一般如果再次make可能会提示make无需做任何事,但是需要重新生成的话需要把原来的.o和可执行程序删除,所以定义一个clean,俗称假目标。

Makefile终极版

如果有很多个.o文件需要引用,每次写就会感到很烦,Makefile提出了自动变量的概念,需要注意的事自动变量只能用在命令里面!

  下面给出常用的六个自动变量:

变量名 作用
$@目标的文件名
$<第一个条件的文件名
$?时间戳在目标之后的所有条件, 并以空格隔开这些条件
$^所有条件的文件名, 并以空格隔开, 且排除了重复的条件
$+与$^类似, 只是没有排除重复的条件
$*目标的主文件名, 不包含扩展名
Bin = test
all:$(Bin)
test:a.o
	g++ -o $(Bin) $< #$< 表示第一个条件名,也就是a.o
a.o:a.cpp
	g++ -c $< -o $@ #$<表示a.cpp , $@表示目标文件名,也就是a.o
clean:
	rm -f *.o $(Bin)

熟练掌握以上写法,基本上普通的Makefile文件就没有问题了。

Makefile文件的编写 文章目录前言一、最简单的 Makefile 文件举例二、使用步骤1.引入库2.读入数据总结欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入 前言 Makefile文件的编写规则及内容 一、最. 阅读详情

相关推荐

从0开始教你编写Makefile文件

编写Makefile第一步,了解什么是Makefile?每当我们写大型项目时,一般需要很多源文件,源文件会在不同的目录中的文件夹里面包含着,这样我们所有的源文件不会在一个文件中包含,用gcc-omain所有的.c文件来编译,就很麻烦了,你需要记住所有的.c文件,那么为了方便编译链接,就此诞生。在学习Makefile之前,首先介绍一下make命令,make命令是GNU的工程化编译工具,它用于编译大量互相关联的源代码,使用它可以实现项目的工程化管理,提高开发效率。.obj.o.lib.a)。..........

oorik的博客 1万+

编写makefile文件

makefile定义一系列规则来指定哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译等。使用makefile自动化编译极大提高软件开发的效率。目标:依赖命令。

qq_45919531的博客 2758

基于51单片机的通讯聊天系统

通过编写51单片机通讯聊天程序,掌握51单片机的各个模块的知识点和运用C语言编写51单片机的能力。用51单片机与口袋开发板设计实现一个单片机与电脑串口助手实现通讯功能的程序。程序的主要功能如下: 1 OLED初始化显示Welcome to Bluetooth communication! 字符串。 2 程序开始时处于接收信息模式, 电脑串口助手发送信息时,将从初始化字符第一个开始显示,电脑串口助手发送信息后,蜂鸣器响铃2秒左右。 3 每次同时按下左右键时,可以轮流切换接收/发送信息模式 4 在发送信息模式时

m0_47419053的博客 3639

如何写一个makefile(详解版+实操版)

Makefile 用于帮助决定大型程序的哪些部分需要重新编译。在绝大多数情况下,编译 C 或 C++ 文件。其他语言通常有自己的工具,其目的与 Make 类似。当您需要根据更改的文件运行一系列指令时,Make 也可以在编译之外使用。本教程将重点关注 C/C++ 编译用例。下面是您可以使用 Make 构建的示例依赖关系图。注意:一定要制表符缩进,不要空格!(所有空格键都用tab键代替)执行完make clean删除掉所有的.o文件和可执行文件。生成makefile需要的文件示例&&.h文件的写法。

link_linkku的博客 3029

在树莓派5(8G版)上运行Ollama + LLM

直接上结论,Ollama在树莓派上能安装,且本身运行起来毫无压力,但具体到大语言模型,Deepseek似乎不总是最佳选择。

ki1381的专栏 1651

SAP S/4HANA 可扩展性 – 面向初学者的简化指南

可扩展性(Extensibility)是 SAP ECC 和 SAP S/4HANA 的一项关键功能。它使客户能够通过定制其业务流程来创造竞争优势,并使合作伙伴能够通过量身定制的解决方案来丰富核心 ECC 或 S/4HANA。在过去的几十年中,SAP 的 on-premise 版本客户和合作伙伴主要使用经典的 ABAP 扩展性来扩展他们的 ERP 解决方案。经典扩展性允许 ABAP 开发人员使用甚至修改所有 SAP 对象。尽管经典扩展性非常强大和灵活,但在当今的云世界中,它已不再是一个好的选择。

SAP学习成长之路的博客 1809

如何编写一个简单的Makefile文件

关于Makefile文件的基本编写及其一些变量的使用

qq_48816869的博客 1666

什么是以太网链路聚合

以太网链路聚合技术通过将多个物理端口捆绑成逻辑端口,可显著提升网络性能。该技术能增加总带宽(各链路带宽之和)、提高可靠性(故障秒级切换)并实现智能负载分担。主要分为手工模式和基于LACP协议的动态模式,后者能检测链路故障更可靠。配置时需确保接口参数一致、模式匹配,适用于核心交换、服务器接入等场景。华为设备通过创建Eth-Trunk接口、指定LACP模式并添加成员接口即可完成部署。这项成熟技术能以低成本解决带宽瓶颈和可靠性问题,是构建高速稳定网络的关键方案。

lai_2020的博客 675

makefile文件的编写

makefile文件 makefile的使用场景 makefile用于编译大量的.c文件 或者是分文件编写的(包含多个 .h 多个.c文件 和主文件 ) 将其转换为可执行文件 。 makefile的作用正是简化了上面的步骤,makefile的使用前提是掌握gcc 然后循序掌握其他内容 1 - 从简单的gcc 操作 到 转换为makefile 如我们要将 main.c 变为可执行文件 main 需要经历 gcc -E gcc -S gcc -C 当然对于单个.c文件转变为可执行文件 我们

C++ 是一门不原谅粗心的语言,而我恰好喜欢这种不原谅。 我是 x,正在成为更严谨的 C++ 开发工程师的路上。 1万+

# 执行 DISM 命令时出错 87 未在此上下文中识别出 restorehealth 选项。解决方法

# 执行 DISM 命令时出错 87 未在此上下文中识别出 restorehealth 选项。解决方法

段子手168的博客 1万+

银河麒麟V10离线升级OpenSSH实战:从编译到回滚全流程

OpenSSH作为Linux系统远程登录的核心组件,其版本升级直接关系到系统安全与等保合规。在信创环境下,银河麒麟V10自带的OpenSSH版本往往无法满足漏洞扫描与安全加固要求,而离线编译升级涉及依赖处理、编译参数、服务替换与回滚方案等多个技术环节。本文围绕银河麒麟V10(x86_64)平台,详细讲解OpenSSH离线升级的完整实操流程,包括环境摸底、依赖包安装、源码编译、配置文件兼容性处理、服务重启验证以及常见问题排查,并分享批量升级与安全加固的工程经验,帮助运维人员在不断网、不重装的前提下一次成功完成

weixin_30582943的博客 388

简单的makefile文件编写

习惯了windows下ide创建工程已经代码的编写,然后一键运行,很简单,因为很多事ide都帮我们做了,但是linux下不一样,需要手动编译,执行一条条的命令,一般工程都是由于很多文件组成的,比如c++有很多.h和.cpp文件,难道编译的话需要我们一个一个手动编译?比如这样: g++ main.cpp fun1.cpp fun2.cpp -o main 如果有几百个几千个呢?在终端敲命令岂不是累...

那又怎样的博客 1万+

43、FMCW雷达高度计仿真

本文介绍了FMCW雷达高度计的波形级建模与仿真过程,重点模拟了着陆和倾斜两种飞行场景以评估其性能。通过结合高程数据和飞行轨迹构建雷达场景,使用自定义信号处理器分析IQ样本并估计高度。结果表明,该高度计在多数情况下满足性能要求,但也存在误差较大的点,提出了地面检测算法优化的潜在方向。

neovim7hacker的博客 135

Makefile文件的简单编写

参考: MakeFile文件是什么——内容、工作原理、作用、使用 makeFile文件作用是什么 嵌入式操作系统linux篇(书) 在嵌入式开发中,一个工程中的源文件是非常多的,如果一个个编译会很麻烦,Makefile的出现解决了这个麻烦事,只要我们把Makefile写好,只需要“make”一下,整个工程完全自动编译,极大的提高了软件开发的效率。 下图显示了makefile在工程中的位置,一个目录...

u013581207的博客 6196

运动控制软件:Siemens Sinamics二次开发_(6).通信接口与协议详解

PROFIBUSPROFINETModbus TCPCANopenEtherCAT每种通信接口都有其特定的应用场景和优势。选择合适的通信接口可以显著提高系统的性能和可靠性。在选择通信协议时,需要根据具体的应用场景和需求综合考虑。每种通信协议都有其特定的优势和局限性,因此在设计运动控制系统时,应选择最适合的协议,以确保系统的性能、可靠性、成本和维护性。通过以上对比和分析,希望开发者能够更好地理解和选择适合的通信接口和协议,从而优化运动控制系统的开发和应用。

2401_87715305的博客 901

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

【Makefile】简单的Makefile编写

Makefile编写 程序的编译和链接 使用C、C++编写可执行文件,首先要把源文件编译成中间代码文件,Linux下是.o文件,即Object File,这个动作叫做编译(complie)。 然后再把大量的Object File合成执行文件,这个动作叫链接(link)。 一个项目会拥有成百上千个源程序文件,再使用G++ or GCC会很麻烦。于是Makefile闪亮登场。 Makefile确定整个工程的编译规则,只需要一个make命令,就可以实现“自动化编译”。 make是一个解释Makefile

半生瓜のblog 3472

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

简单Makefile编写教程

Makefile编写1. make和Makefile的介绍1.1 make工具利用make工具可以自动完成编译工作。这些工作包括: 如果仅仅修改了某几个源文件,则只重新编译这几个源文件; 如果某个头文件被修改,则重新编译所有包含该头文件的源文件。 利用这种自动编译可大大简化开发工作,避免不必要的重新编译。1.2 Makefilemake工具通过一个称为Makefile的文件来完成并自动维护编译工作。

men_wen的博客 1万+

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

NTscan扫描工具

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

makefile的简单编写

一.最简单makefile的编写 1.makefile的命名:makefile 2.makefile的规则:目标,依赖,命令 格式为: 第一行为目标:依赖(目标就是你要生成可执行文件的名字,依赖就是要编译的文件) 第二行,先开始有一个tab缩进。然后就是gcc的编译命令(注意开始有tab缩进) 当编写完makefile之后直接make就可以执行编译文件。 二.提升版makefile 以上就是最简单的makefile的编写。但是很容易发现这种...

apple_51801179的博客 6182

如何编写简单的Makefile文件

一、什么是Makefile 1.GNU make是一个命令工具,是一个用来控制软件构建过程的自动化管理工具。Make工具通过称为Makefile的文件完成并自动维护编译工作。 3、makefile定义了一系列的规则来指定,一个工程中的哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作。 总之,makefile为我们带来了极大地好处—–“自动化编译”,一旦...

everthing willl be ok 9244

如何编写makefile文件

makefile文件编写入门

weixin_50941083的博客 3815

Linux编写makefile详细教程

Linux下编写 makefile 详细教程 近期在学习Linux下的C编程,买了一本叫《Linux环境下的C编程指南》读到makefile就越看越迷糊,可能是我的理解能不行。 于是google到了以下这篇文章。通俗易懂。然后把它贴出来,方便学习。 后记,看完发现这篇文章和《Linux环境下的C编程指南》的makefile一章所讲述的惊人的相似,仅仅是这篇文章从一个实例切入,在有些地方比較好...

墨轩 2879

为Fortran或者C编写简单的Makefile文件

贴一些网址: http://www.cs.colby.edu/maxwell/courses/tutorials/maketutor/ 简单为C写makefile https://docs.oracle.com/cd/E19205-01/819-5263/aevog/index.html 这是对fortan中编译时会出现的mod文件做的说明,其主要观点是当编译一个module时不仅会生成....

古建木 2470

基于树莓派Linux的简单Makefile文件编写(手写)

本文用自己编写的简单Makefile文件,使用make命令自动编译所有的文件,使用make clean命令,清空生成的.obj文件,具体步骤如下。 1.1首先在/home/pi/TJQ/project文件夹下建立如下四个文件main.cpp、test1.hpp、test1.cpp、makefile,具体的内容如下所示: main.cpp #include "test1.hpp" int m...

净无邪博客 3224

makefile文件编写教程

技术交流QQ群:1027579432,欢迎你的加入! 1.make介绍 gcc:编译器(gcc根据菜谱进行编译) make: linux自带的构建器(相当于一个菜谱) 构建的规则(菜谱)在makefile中 2.makefile文件的命名 makefile Makefile 3.makefile中的规则 gcc a.c b.c c.c -o app这种方法在文件很多情况下,利用gcc编译时会有很多参数,不利于整个项目的管理。因此,需要编写makefile文件,便于整个项目的编译。 makef

CurryCoder的个人博客 1393

Linux下makefile文件的编写

在学习如何编写makefile文件之前,我们首先需要了解什么是makefile文件: makefile描述了整个工程的编译和链接等规则。它指明了哪些文件需要先编译,哪写文件需要后编译,哪些文件需要重新编译,甚至进行更复杂的功能操作。makefile的“自动化编译”可以极大的提高软件的开发效率。 makefile的基本规则: 目标:依赖 (tab)命令 根据这个命令来编写一个简单的makefile文件: 定义了fun1.cpp fun2.cpp head.h 和main.cpp文件,利用这

qq_56615615的博客 4847
上一篇: gcc/g++ 命令选项
下一篇: CentOs下安装Open vSwitch
NUAA丶无痕
博客等级 码龄9年 154粉丝 184原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值