IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> 1.10&1.11&1.12 Makefile简单入门 -> 正文阅读

[系统运维]1.10&1.11&1.12 Makefile简单入门

本系列为牛客网Linux C++课程的课程笔记。

0. Makefile介绍

在这里插入图片描述

1. Makefile文件命名与规则

在这里插入图片描述
在这里插入图片描述
示例:
使用vim编写如下名为Makefile的文件:

app:sub.o add.o mult.o div.o main.o
	gcc sub.o add.o mult.o div.o main.o -o app

sub.o:sub.c
	gcc -c sub.c -o sub.o

add.o:add.c
	gcc -c add.c -o add.o

mult.o:mult.c
	gcc -c mult.c -o mult.o

div.o:div.c
	gcc -c div.c -o div.o
	
main.o:main.c
	gcc -c main.c -o main.o

首先看第一行,app是我们的目标文件,冒号后面是生成该目标文件所需要的依赖,第二行是我们要执行的命令。
在使用sub.o add.o mult.o div.o main.o依赖时,发现目录中没有对应的.o文件,则向下寻找其他规则,执行以生成其依赖。注意,如果下面的规则中与第一行所需的依赖无关,则不会被执行,也就是说Makefile中的其他规则都是为第一条规则服务的。

2. 变量

在这里插入图片描述
有了变量我们写makefile就方便一些,比如我们之前的makefile就可以如此改写:

src = sub.o add.o mult.o div.o main.o
target = app

$(target):$(src)
	$(CC) $^ -o $(target)

sub.o:sub.c
	gcc -c sub.c -o sub.o

add.o:add.c
	gcc -c add.c -o add.o

mult.o:mult.c
	gcc -c mult.c -o mult.o

div.o:div.c
	gcc -c div.c -o div.o

main.o:main.c
	gcc -c main.c -o main.o

把所有的依赖定义为src变量,把目标文件名定义为target变量,然后用 $ 取值,其中 $ (CC)是预定义变量,表示C编译器名称;$^ 也是预定义变量,表示所有的依赖文件。

3. 模式匹配

在这里插入图片描述
原先是按左边的方式写的,一个个写很麻烦,这里可以使用模式匹配,即通配符%,在同一规则中,%匹配同一个字符串。
如此以来,之前的makefile可如此改写:

src = sub.o add.o mult.o div.o main.o
target = app

$(target):$(src)
	$(CC) $^ -o $(target)

%.o:%.c
	$(CC) -c $< -o $@

src中的每一个依赖都可以匹配下面的这条规则。

4. 函数

现在通过模式匹配,避免了我们反复写规则,但是依赖文件我们还是要一个一个写在src里,有没有办法直接获取这些文件的文件名呢?可以使用$(wildcard PATTERN…)函数。
在这里插入图片描述
举例,当前目录如下:
在这里插入图片描述

假如我们想让在makefile文件中获得当前目录中所有.c文件的名称,即可执行:

src = $ (wildcard ./*.c )

这样就能获得当前目录下所有.c文件的名称。
但是之前的示例代码中需要的是与.c文件同名的.o文件,而目录中没有.o文件,我们可以使用$(patsubst < pattern>,< replacement>,< text>)函数:
在这里插入图片描述
我们现在想要在makefile中获得与目录中.c文件同名的.o文件,便调用patsubst函数把获得的.c文件进行字符串替换即可.
该函数的作用简而言之就是把< text >中的匹配< pattern >的串用< replacement >代替。
其中< text >字段由刚才调用的src = $ (wildcard ./*.c )获得,然后我们想将其中所有的.c都替换成.o,可将原来的makefile文件修改如下:

src = $(wildcard ./*.c)
objs = $(patsubst %.c, %.o, $(src))
target = app

$(target):$(objs)
	$(CC) $^ -o $(target)

%.o:%.c
	$(CC) -c $< -o $@

可实现与最初的示例程序相同的功能。

  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2021-10-12 23:53:40  更:2021-10-12 23:55:38 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 18:27:16-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码