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 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> 四个规则入门Makefile,从入门到高薪 -> 正文阅读

[系统运维]四个规则入门Makefile,从入门到高薪

Makefile

前言

  • 📄本文内容Makefile 教程
  • 📇 所属专栏:🔙C/C++
  • 👤 作者主页紫荆鱼
  • 📆 创作时间:2022-1-9
  • 📟 运行环境:CentOS 8 | gcc 8.5.0

1.编译并运行一个程序

在这里插入图片描述

  1. Windows:点击build and run按钮自动编译运行。由于自动挡汽车一样,一切都是自动化的。
  2. Linux:通过GCC编译器编译。犹如开手动挡的汽车一样。
    如上图程序,我们通过GCC编译指令,如下,就可以编译运行该程序。
//通过该指令得到可执行文件add
gcc -o add add.c

//运行该程序
./add

2.编译过程简介

编译过程:

  1. 第一步:预编译
    指令:gcc -E add.c -o add.i
  2. 第二步:汇编
    指令:gcc -S add.i -o add.s
  3. 第三步:编译
    指令:gcc -c add.s -o add.o
  4. 第四步:链接
    指令:gcc add.o -o add

3.📑规则一:显示规则

写一个简单地Makefile

语法:

目标文件:依赖文件
[ Tab ] 指令

例子: 以上述编译过程为例

add:add.o
	gcc add.o -o add
add.o:add.s
	gcc -c add.s -o add.o
add.s:add.i
	gcc -S add.i -o add.s
add.i:add.c
	gcc -E add.c -oadd.i

在这里插入图片描述
在Makefile文件中我们也已添加一些非编译的指令,他的目的只是“do something” ,不参加编译过程。我们称这段指令为伪目标用.PHONY:指代,例如:删除编译产生的文件

.PHONY:
clear:
	rm -rf add.i add.s add.o add

在这里插入图片描述

4.📑规则二:变量替换

例子2:
add.h
在这里插入图片描述
add.c
在这里插入图片描述
main.c
在这里插入图片描述

利用显示规则编写Makefile如下:

app:main.o add.o
	gcc -o app main.o add.o
main.o:main.c add.h
	gcc -c main.c
add.o:add.c add.h
	gcc -c add.c

变量替换语法:

= (替换)
+= (追加)
:= (恒等于)
$(使用)

改写上述Makefile:

TAR = app
OBJ = main.o add.o
CC = gcc

$(TAR):$(OBJ)
	$(CC) -o $(TAR) $(OBJ)
main.o:main.c add.h
	$(CC) -c main.c
add.o:add.c add.h
	$(CC) -c add.c

5.📑规则三:隐含规则

语法:

%.x :任意的.x文件,.x为某文件后缀名
*.x : 所有的.x文件,x为某文件后缀名

TAR = app
OBJ = main.o add.o
CC = gcc

$(TAR):$(OBJ)
	$(CC) -o $(TAR) $(OBJ)
%o:%.c %.h
	$(CC) -c %.c

6.📑规则四:通配符规则

语法:

$@ : 所有的目标文件
$^:所有的依赖文件
$< : 所有的依赖文件的第一个

TAR = app
OBJ = main.o add.o
CC = gcc

$(TAR):$(OBJ)
	$(CC) $^ -o $@
%o:%.c %.h
	$(CC) -c $^ -o $@

感谢您的阅读,如有帮助送小编一个三连,十分感谢

  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2022-01-12 00:27:51  更:2022-01-12 00:27:54 
 
开发: 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/16 6:53:47-

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