当前位置: 首页 > article >正文

makefile基础知识

Makefile是一个自动化构建工具,可以根据规则自动地编译和链接程序。它由一组规则组成,每个规则指定了如何从源代码生成一个目标文件,以及如何检测源文件的更改并重新生成目标文件。在本文中,我们将深入探讨Makefile的原理和用法。
对于更加入门的makefile知识:可以结合这篇文章查看:文章链接

一、Makefile的基本原理

Makefile的核心是规则(rule),规则由三个部分组成:目标(target)、依赖(prerequisites)和命令(recipe)。目标是规则的产出物,依赖是规则的输入,命令则是构建目标所需要执行的操作。

Makefile的工作原理可以概括为:首先,Make会解析Makefile文件,将其中的规则转换成依赖关系图;其次,它会检查每个目标的依赖是否有更新,如果有更新,则执行对应的命令,生成新的目标文件。这个过程可以通过以下命令来触发:


make [options] [target]
其中,target是需要构建的目标,如果没有指定,则默认构建第一个目标。options则是一些选项,可以控制构建的行为。

二、Makefile的语法

Makefile的语法比较简单,它由三个基本部分组成:变量、规则和注释。

变量
变量是Makefile中非常重要的概念,它可以用来定义一些常量,如源文件、编译器选项等。变量可以在Makefile中任意位置定义,并可以被后续的规则引用。变量的定义语法为:

变量名 = 变量值

例如:

makefileCC = gcc
CFLAGS = -Wall -O2
这里定义了两个变量CC和CFLAGS,分别表示编译器和编译选项。

规则
规则是Makefile中最核心的概念,它描述了如何从源文件生成目标文件,并包含了一些命令。规则的语法为:

目标: 依赖1 依赖2 ...
[tab]命令1
[tab]命令2
...

其中,目标表示规则产生的文件,依赖表示目标文件的输入,命令则是用来生成目标文件的操作。注意,在Makefile中,命令前必须要有一个tab键,否则会被认为是注释。

例如:

main.o: main.c$(CC) $(CFLAGS) -c main.c -o main.o

这里定义了一个规则,表示如何从main.c生成main.o。规则的命令是使用gcc编译main.c文件,并使用变量CFLAGS指定编译选项。

注释
注释在Makefile中非常重要,可以帮助我们更好地理解Makefile中的规则和变量,也可以用来解释我们的构建流程,如何生成目标文件,以及使用哪些编译选项。注释的语法为:


# 这是一条注释

在Makefile中,注释以#开头,并且可以在任何地方使用。注释可以帮助我们更好地理解Makefile文件的内容和用法。

三、Makefile的用法

Makefile的用法比较灵活,可以根据具体的需求来定义规则和变量。下面是一些常用的用法:

定义变量
可以使用变量来定义一些常量,如源文件、编译器选项等。在Makefile中,变量可以使用=或:=进行赋值,其中=表示递归展开,:=表示简单展开。例如:

makefile

CC = gcc
CFLAGS = -Wall -O2

定义规则
可以使用规则来定义如何生成目标文件,并指定依赖关系。在Makefile中,规则的语法为:

目标: 依赖1 依赖2 ...
[tab]命令1
[tab]命令2
...

例如:


main.o: main.c$(CC) $(CFLAGS) -c main.c -o main.o

定义伪目标
有些时候,我们并不需要真正的目标文件,而只是想执行一些命令。这时可以使用伪目标来实现。在Makefile中,伪目标的语法为:

makefile

.PHONY: target

其中,target表示伪目标的名称。例如:

makefile

.PHONY: clean
clean:rm -f *.o

这里定义了一个伪目标clean,用来删除所有的目标文件。

使用变量和函数
在Makefile中,可以使用变量和函数来简化构建过程。例如,可以使用$(wildcard pattern)函数来获取符合特定模式的所有文件,使用$(patsubst pattern,replacement,text)函数来替换文件名中的特定字符串。

例如:

makefile

SRCS = $(wildcard *.c)
OBJS = $(patsubst %.c, %.o, $(SRCS))

这里定义了两个变量,分别用来获取所有的.c文件和对应的.o文件。

四、总结

Makefile是一个非常强大的自动化构建工具,可以帮助我们自动化构建程序,提高开发效率。在本文中,我们介绍了Makefile的基本原理和语法,以及一些常用的用法。需要注意的是,在编写Makefile时,需要注意规则的依赖关系和命令的正确性,否则会导致构建失败。同时,也要尽量使用变量和函数来简化构建过程,提高代码的可维护性和可重用性

http://www.lryc.cn/news/2415147.html

相关文章:

  • JDK安装配置教程(保姆级)
  • 【ViT系列(2)】ViT(Vision Transformer)代码超详细解读(Pytorch)
  • OPC基本知识介绍——什么是OPC
  • Tornado介绍
  • Nacos篇五 - Nacos集群(Linux下standalone模式和cluster模式)
  • 全面文档格式处理工具Aspose最新中文教程指南请查收!
  • LTspice基础教程-007.voltage电压源基本设置
  • 了解函数递归
  • 微信小程序weui的使用
  • 2 DOS命令
  • Tomcat部署及多实例(一)
  • c语言md5函数 linux,【转】MD5校验C语言实现源代码
  • 一文详解单例模式以及原理分析
  • 入侵检测系统详解(IDS)
  • C# String.Format对字符串格式化
  • Python 爬虫:如何用 BeautifulSoup 爬取网页数据
  • 一文读懂GPU 通信之PCIe
  • CRC 校验解释
  • 深入浅出话VC++——MFC的本质
  • 手把手教你利用 Scrapy 编写一个完整的爬虫
  • 性能揭秘:电脑跑分测试你的实力
  • Linear()参数以及用法
  • yml配置文件的编写
  • 什么是RISC-V
  • 在线拼图照片制作怎么开始?6步打造精美图片集
  • mybatis-plus中wrapper的用法(详细)
  • VPC 是什么
  • 软件测试用例经典方法 | 逻辑覆盖测试法及案例
  • Excel的VLOOKUP函数及其用法
  • suse linux 远程桌面,Xmanager 远程连接CentOS linux和SUSE linux