Linux第65步_学习“Makefie”

学习“Makefie”,为后期学习linux驱动开发做铺垫。

1、在“/home/zgq/linux/atk-mp1”创建一个“Test_MakeFile”目录用于学习“Makefie”。

打开终端

输入“cd /home/zgq/linux/回车”,切换到“/home/zgq/linux/”目录

输入“mkdir Linux_Drivers回车”,创建“Linux_Drivers”目录

输入“cd Linux_Drivers回车

切换到“/home/zgq/linux/Linux_Drivers/”目录

输入“mkdir TetsMakeFile回车”,创建“TetsMakeFile”目录

输入“cd TestMakeFile回车

切换到“/home/zgq/linux/Linux_Drivers/TestMakeFile”目录

2、输入“vim main.c回车

输入内容如下:

#include <stdio.h>

int main(int argc, char *argv[])

{

printf("Hello World!\n");

}

3、输入“vim Makefie回车

输入内容如下:

main: main.o

#生成“main”需要依赖“main.o”

        gcc -o main main.o

#将“main.o”编译输出main.exe

        @echo Output main.exe

#只输出Output main.exe

main.o: main.c

#生成“main.o”需要依赖“main.c”

        gcc -c main.c

#编译“main.c”

clean:

#生成“clean”目标不依赖任何文件

        rm *.o

#删除所有后缀为“.o”的文件

        rm main

#删除“main”这个可执行文件

        @echo Clear *.o and main.exe

#只输出Clear *.o and main.exe

见下图:

4、编译

打开终端

输入“make回车”执行编译

输入“ls回车”,查看/home/zgq/linux/Linux_Drivers/TetsMakeFile”目录下的所有文件和文件夹

输入“./main回车”,运行main.exe

输入“make clean回车”清除工程

输入“ls回车”,查看/home/zgq/linux/Linux_Drivers/TetsMakeFile”目录下的所有文件和文件夹

Makefie文件和C文件是位于同一个目录中,才可以使用这个“Makefile”。

1)、Makefle 中的“注释开头”要用符号“#”开头,不能使用C语言中的“//”和“/*  */”注意:“#”要顶格输入,否则会被当作一条语句

2)、Makefile输出字符串使用“echo”

比如:

Print:

#必须以标号开始,否则不能用

        @echo name

#只输出name

输入“make回车

3)、Makefile中的变量值是字符串,比如:objects = XXX.o,表示objects的值是字符串“XXX.o”;

4)、Makefile中变量定义:变量名 = xx,比如:objects = XXX.o,表示objects的值是字符串“XXX.o”;

5)、Makefile中引用变量的方法是“$(变量名)”,比如:$(objects)就表示引用了objects变量。

6)、赋值符“:=”不会使用后面定义的变量,赋值符“=”会使用后面定义的变量。

举例如下:

name1 = V1

#给变量name1赋值为“V1”

name2 := $(name1)

#给变量name2赋值为“V1”,它引用了name1变量

name3 = $(name1)

#给变量name3赋值为“V1”,它引用了name1变量

name1 = V2

#给变量name1赋值为“V2”

#由于name2使用的赋值符为“:=”,所以name2的值保持不变

#由于name3使用的赋值符为“=”,所以name3变成了“V2”

print:

        @echo name3 = $(name3)

        @echo name2 = $(name2)

        @echo name1 = $(name1)

输入“make回车

见下图:

7)、赋值符“?=”

name1 = V1

#给变量name1赋值为“V1”

name2 = V2

#给变量name2赋值为“V2”

name1 ?= V3

#由于变量name1被赋值了,所以name1的值还是“V1”

name3 ?= V4

#由于变量name3没有被赋值,所以name3的值是“V4”

print:

        @echo name3 = $(name3)

        @echo name2 = $(name2)

        @echo name1 = $(name1)

输入“make回车

8)、变量追加“+=”

objects = main.o inpiut.o

#将字符串“main.o inpiut.o”赋值给变量objects

objects += calcu.o

#将字符串“main.o inpiut.o calcu.o”赋值给变量objects

print:

        @echo objects = $(objects)

输入“make回车

9)、目标名: 依赖文件,比如:“main: main.o input.o”,表示目标名main需要依赖“main.o input.o”文件;

10)、按“TAB键”后,输入的是“命令”,它用来创建“Shell进程”;

11)、Makefle代码中“行首需要空出”,必须使用“TAB键”,不能使用“空格键”

12)、当“%”出现在“目标名”中的时候,则目标名中“%所代表的值”取决于依赖文件中的“%”值

%.o : %.c   #所有以“.c”结束的文件,目标名中的“%.o”的“%”和所有以“.c”结束的文件名保持一致。

假如存在main1.c和main2.c,则“%.o : %.c”表示的意思如下:

main1 : main1.c

main2 : main2.c

举例:

输入“vim main.c回车

输入内容如下:

#include <stdio.h>

int main(int argc, char *argv[])

{

printf("Hello World!\n");

}

输入“vim Makefile回车

main: main.o

#生成“main”需要依赖“main.o”

        gcc -o main main.o

#将“main.o”编译输出main.exe

        @echo Output main.exe

#只输出Output main.exe

%.o: %.c

#目标名中的“%.o”的“%”和所有以“.c”结束的文件名保持一致。因为只有一个main.c,所以表示“main.o: main.c”

        gcc -c main.c

#编译“main.c”

clean:

#生成“clean”目标不依赖任何文件

        rm *.o

#删除所有后缀为“.o”的文件

        rm main

#删除“main”这个可执行文件

        @echo Clear *.o and main.exe

#只输出Clear *.o and main.exe

输出“make回车

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/407477.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

代码随想录刷题笔记-Day22

1. 修剪二叉搜索树 669. 修剪二叉搜索树https://leetcode.cn/problems/trim-a-binary-search-tree/ 给你二叉搜索树的根节点 root &#xff0c;同时给定最小边界low 和最大边界 high。通过修剪二叉搜索树&#xff0c;使得所有节点的值在[low, high]中。修剪树 不应该 改变保留…

神经网络系列---计算图基本原理

文章目录 计算图符号微分符号微分的步骤示例符号微分在计算图中的使用总结 数值微分前向差分法中心差分法数值微分的使用注意事项总结 自动微分1. 基本原理2. 主要类型3. 计算图4. 应用5. 工具和库6. 优点和缺点 计算图1. **计算图的建立**2. **前向传播**3. **反向传播**4. **…

《插入排序》与《选择排序》

目录 前言&#xff1a; 排序的概念&#xff1a; 插入排序&#xff1a; 1.直接插入排序&#xff1a; 2.希尔排序( 缩小增量排序 )&#xff1a; 选择排序&#xff1a; 1.直接选择排序: 2.快速排序&#xff1a; hore思想&#xff1a; 挖坑法&#xff1a; 双指针法&#…

责任链模式与spring容器的搭配应用

背景 有个需求&#xff0c;原先只涉及到一种A情况设备的筛选&#xff0c;每次筛选会经过多个流程&#xff0c;比如先a功能&#xff0c;a功能通过再筛选b功能&#xff0c;然后再筛选c功能&#xff0c;以此类推。现在新增了另外一种B情况的筛选&#xff0c;B情况同样需要A情况的筛…

软件设计师软考题目解析02 --每日五题

想说的话&#xff1a;要准备软考了。0.0&#xff0c;其实我是不想考的&#xff0c;但是吧&#xff0c;由于本人已经学完所有知识了&#xff0c;只是被学校的课程给锁在那里了&#xff0c;不然早找工作去了。寻思着反正也无聊&#xff0c;就考个证玩玩。 本人github地址&#xf…

网络中的进程监控

每个企业都有一些流程和程序来实现他们的业务目标&#xff0c;这同样适用于网络&#xff0c;网络中的进程监控是分析、处理和管理网络内发生的各种活动以提高网络性能和能力的做法。 网络中需要监控的基本进程 监视系统资源&#xff08;CPU 利用率、内存利用率、CPU 温度等&a…

ChatGPT在数据分析学习阶段的应用

ChatGPT在数据分析学习阶段的应用 ​ 这个阶段&#xff0c;核心是三件事&#xff1a;制定学习计划、确定学习资料以及学习策略。我们可以自己完成这几件事&#xff0c;当然也可以借助ChatGPT来高效地达到目的。 1.1 制定学习计划 ​ 学习阶段的第一件事是制定学习计划&#…

红队评估四靶场

文章目录 环境搭建1.设置所需网卡2.更改win7设置3.DC设置4.web设置开启docker服务5.kali网段`渗透启动`1.确认对方靶机的IP地址2.端口探测3.web探测`2001端口``2002端口`Tomcat/8.5.19漏洞复现`2003端口`4.docker逃逸5.ssh密钥爆破`域渗透启动`1.提权2.隧道搭建各项配置文件内容…

自助点餐系统微信小程序,支持外卖、到店等

总体介绍 系统总共分为三个端&#xff1a;后端&#xff0c;后台管理系统、微信小程序。 基于当前流行技术组合的前后端分离商城系统&#xff1a; SpringBoot2MybatisPlusSpringSecurityjwtredisVue的前后端分离的商城系统&#xff0c; 包含分类、sku、积分、多门店等 预览图…

JavaSE-04笔记【面向对象01】

文章目录 1. final 关键字1.1 采用final修饰的类不能被继承1.2 采用 final 修饰的方法不能被覆盖1.3 采用 final 修饰的变量(基本类型)不能被修改1.4 采用final 修饰的变量必须显示初始化1.5 如果修饰的引用&#xff0c;那么这个引用只能指向一个对象&#xff0c;也就是说这个引…

OpenBMC的c++代码中的变量初始化问题(二)

1 开发平台 Win11、VS2022、Fedora39。 2 作业目的 通过VS2022跨平台Linux构建openbmc/intel-ipmi-oem的x64可执行模块。 3 问题描述 该模块启动后&#xff0c;出现以下异常&#xff1a; 上图中的调用堆栈消息是&#xff1a; std::__uniq_ptr_impl<sd_bus, sdbusplus::…

Windows下VTK 源码编译(For Qt PCL)

虽然我们在windows下安装PCL的时候就已经安装了VTK&#xff0c;由于跟着PCL安装的VTK是没有和QT联合编译的&#xff0c;所以在使用PCL和QT做点云可视化界面的时候是无法使用QT的插件QVTKWidget。 VTK 源码下载 Tags VTK / VTK GitLab 我这里的环境是Win10 Visual Studio&…

Android 相机启动流程笔记

和你一起终身学习&#xff0c;这里是程序员Android 经典好文推荐&#xff0c;通过阅读本文&#xff0c;您将收获以下知识点: 一、Camera 框架介绍&#xff1a; Camera的框架分为Kernel部分和hal部分&#xff0c;其中kernel部分主要有两块&#xff1a; image sensor driver&…

【计算机学院寒假社会实践】——卫生服务无限情,社区居民乐融融

为了加强社区基层党组织建设和改进社区工作&#xff0c;推动社区更好繁荣发展&#xff0c;曲阜师范大学计算机学院“青年扎根基层&#xff0c;服务走进社区”实践队员周兴睿在2024年2月14日来到了山东省滨州市陈集社区&#xff0c;对社区卫生进行清洁工作。 这一年&#xff0c;…

[剪藏] - “闷声赚票房”的雷佳音,“窝囊废赛道”的成功学代表?

作者| 糖炒山楂 编辑| Mia 猫眼专业版上&#xff0c;雷佳音主演电影票房达到了147亿&#xff0c;排在影人榜第12名。按照平台对《热辣滚烫》和《第二十条》最终票房的预测&#xff0c;他的个人票房还有10亿左右的上升空间。 相比贾玲、赵丽颖等女性扛起了春节档的焦点话题&a…

微服务Day6

文章目录 DSL查询文档RestClient查询文档快速入门 旅游案例 DSL查询文档 RestClient查询文档 快速入门 Testvoid testMatchAll() throws IOException {//1.准备RequestSearchRequest request new SearchRequest("hotel");//2.准备DSLrequest.source().query(QueryB…

计算机网络实验四VLAN与三层交换机

一、实验目的和要求 1&#xff09;掌握VLAN的基本配置方法&#xff0c;理解VLAN的功能和作用&#xff1b; 2&#xff09;掌握三层交换机的基本配置方法。 二、实验环境 1&#xff09;运行Windows 2008 Server/XP/7操作系统的PC一台。 2&#xff09;PacketTracer。 实验内…

H12-821_29

29.四台路由器运行IS-S且已经建立邻接关系,区域号和路由器的等级如图中标记,下列说法中正确的有? A.R2和R3都会产生ATT置位的Level-1的LSP B.R1没有R4产生的LSP,因此R1只能通过缺省路由和R4通信 C.R2和R3都会产生ATT置位的Leve1-2的LSP D.R2和R3互相学习缺省路由,该网络出现路…

Github 2024-02-23 开源项目日报 Top10

根据Github Trendings的统计&#xff0c;今日(2024-02-23统计)共有10个项目上榜。根据开发语言中项目的数量&#xff0c;汇总情况如下&#xff1a; 开发语言项目数量非开发语言项目4Python项目3TypeScript项目1HTML项目1Dart项目1Rust项目1 从零开始构建你喜爱的技术 创建周…

CVE-2023-44313 Apache ServiceComb Service-Center SSRF 漏洞研究

本次项目基于go语言&#xff08;本人不精通&#xff09;&#xff0c;虽不是java web框架了 &#xff0c;但搭建web服务的框架一些思想理念却是通用的&#xff0c;我们由此可以得到一些蛛丝马迹....... 目录 漏洞简介 漏洞分析 漏洞复现 漏洞简介 Apache ServiceComb Servi…