Linux第65步_学习“Makefie”

news2024/10/6 6:49:25

学习“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回车

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【AUTOSAR】--02 AUTOSAR网络管理相关参数

这是AUTOSAR网络管理梳理的第二篇文章&#xff0c;主要讲解AUTOSAR网络管理的相关参数。第一篇链接【01 AUTOSAR网络管理基础】。​ 相关参数有很多&#xff0c;我挑了一些相对重要的参数&#xff0c;分三部分进行讲解&#xff1a; 第一部分&#xff1a;比较常用&#xff0c…

uni-app 实现拍照后给照片加水印功能

遇到个需求需要实现&#xff0c;研究了一下后写了个demo 本质上就是把拍完照后的照片放到canvas里&#xff0c;然后加上水印样式然后再重新生成一张图片 代码如下&#xff0c;看注释即可~使用的话记得还是得优化下代码 <template><view class"content"&g…

​Sqli-labs靶场第9关详解[Sqli-labs-less-9]

Sqli-labs-Less-9 前言&#xff1a; SQL注入的三个条件&#xff1a; ①参数可控&#xff1b;&#xff08;从参数输入就知道参数可控&#xff09; ②参数过滤不彻底导致恶意代码被执行&#xff1b;&#xff08;需要在测试过程中判断&#xff09; ③参数带入数据库执行。&#…

C#_扩展方法

简述&#xff1a; 扩展方法所属类必需是静态类&#xff08;类名依据规范通常为XXXExtension&#xff0c;XXX为被扩展类&#xff09;扩展方法必需是公有的静态方法扩展方法的首个参数由this修饰&#xff0c;参数类型为被扩展类型 示例&#xff1a; static class DoubleExtens…

windows安装 RabbitMQ

首先打开 RabbitMQ 官网&#xff0c;点击 Get Started(开始) 点击 Download Installation(下载安装)。 这里提供了两种方式进行安装&#xff0c;我们使用第二种方法。 使用 chocolatey以管理用户身份使用官方安装程序 往下滑&#xff0c;第二种方法需要 Erlang 的依赖&#x…

蓝桥杯14届计算思维国赛U8组包含真题和答案

十四届蓝桥杯国赛考试计算思维 U8 组 答案在底部 第一题 以下选项中,( )是由美国计算机协会设立,对在计算机领域内作出重要贡献的个人授予的奖项 。A.图灵奖 C.菲尔兹奖 B.诺贝尔奖 D.普利策奖 第二题 希希去吃寿司。餐台上摆出了许多食物,可供大家自选。如下图所示。 …

Linux的文件操作,重拳出击( ̄︶ ̄)

Linux的文件操作 学习Linux的文件操作&#xff0c;一般需要知道一个文件如果你想要操作他&#xff0c;必须知道你对这个文件有什么操作的权限或者修改你自己对文件操作的权限。必须要知道文件有三种权限 r&#xff1a;可读 w&#xff1a;可写 x&#xff1a;可执行 在打开Linux…

访问raw.githubusercontent.com失败问题的处理

1 问题 GitHub上的项目的有些资源是放在raw.githubusercontent.com上的&#xff0c;通常我们在安装某些软件的时候会从该地址下载资源&#xff0c;直接访问的话经常容易失败。 # 安装operator kubectl apply -f https://raw.githubusercontent.com/oceanbase/ob-operator/2.1…

PgSQL - 内核特性 - 把DuckDB弄进来怎么样

PgSQL - 内核特性 - 把DuckDB弄进来怎么样 DuckDB是一款高性能的分析型数据库系统&#xff0c;支持了基于Push-based pipeline的向量化执行引擎。这么好的一款数据库&#xff0c;有办法直接弄到PgSQL里面&#xff0c;以利用其优秀的列式存储、向量化执行引擎等优秀特性吗&#…

【C语言】linux内核ipoib模块 - ipoib_ib_post_receive

一、中文注释 用于以太网接口&#xff08;InfiniBand&#xff09;上的IP over IB&#xff08;IPoIB&#xff09;设备的Linux内核函数&#xff0c;负责将接收缓冲区&#xff08;一个包&#xff09;提交到网络设备的队列中等待数据到达。下面是中文注释版本的函数代码&#xff1…

Mockito单元测试Mockito对Service层的测试案例

前言 以下是关于Mockito的API使用文档 官网&#xff1a;http://mockito.org/ 官网英文API文档&#xff1a;https://javadoc.io/static/org.mockito/mockito-core/5.10.0/help-doc.html#index 非官方中文API文档&#xff1a;https://gitee.com/wnboy/mockito-doc-zh#mockito-%E…

c语言字符函数和字符串函数

目录 1. 字符分类函数2. 字符转换函数3. strlen的使用和模拟实现4. strcpy的使用和模拟实现5. strcat的使用和模拟实现6. strcmp的使用和模拟实现7. strncpy函数的使用8. strncat函数的使用9. strncmp函数的使用10. strstr的使用和模拟实现11. strtok函数的使用12. strerror函数…

阿里云的流量价格表_2024阿里云服务器流量费用表

阿里云服务器宽带按使用流量怎么收费的&#xff1f;价格为0.8元/GB&#xff0c;地域不同流量价格也不同&#xff0c;北京、杭州、上海、深圳等中国大陆地域是0.8元每GB&#xff0c;中国香港是1元/GB&#xff0c;美国流量0.5元1GB、日本流量0.6元、韩国流量0.8元&#xff0c;阿里…

利用Dynamo为家具族三维截图并导入到明细表

前几天我在朋友圈发了一个小视频&#xff0c;是利用Dynamo为家具族截图&#xff0c;并将截图添加到族参数&#xff0c;以便于在图纸中显示族的样子。效果如下&#xff1a; 此处为语雀视频卡片&#xff0c;点击链接查看&#xff1a; 利用Dynamo为家具族三维截图并导入到明细表 …

2.WEB渗透测试-前置基础知识-web基础知识和操作系统

web基础知识 1.http协议 超文本传输协议是互联网上应用最广泛的一种网络协议。所有www文件都必须遵守的一个标准&#xff0c;是以 ASCII 码传输&#xff0c;建立在 TCP/IP 协议之上的应用层规范&#xff0c;通俗点说就是一种固定的通讯规则。 2、网络的三种架构及特点 网络应…

港科夜闻|香港科大计划建立北部都会区卫星校园完善科大创新带,发展未来创新科技 未来医药发展及跨学科教育...

关注并星标 每周阅读港科夜闻 建立新视野 开启新思维 1、香港科大计划建立北部都会区卫星校园完善“科大创新带”&#xff0c;发展未来创新科技、未来医药发展及跨学科教育。香港科大校长叶玉如教授在2月22日的媒体会议上表示&#xff0c;香港科大将在北部都会区建立卫星校园&a…

5.2.鸿蒙LiteOS-M los_dispatch

目录 一、cortex-m4 los_dispatch.S代码分析坚持就有收获 一、cortex-m4 los_dispatch.S代码分析 .syntax unified #.syntax [unified | divided], 指定arm 汇编语法规则 .arch armv7e-m #指定平台, 与命令行参数-march同样的作用 .fpu fpv4-sp-d16 #指定浮点运算…

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

根据Github Trendings的统计&#xff0c;今日(2024-02-21统计)共有10个项目上榜。根据开发语言中项目的数量&#xff0c;汇总情况如下&#xff1a; 开发语言项目数量Python项目8非开发语言项目1TypeScript项目1 gpt4free 语言模型集合改进计划 创建周期&#xff1a;300 天开…

说说设备像素、css像素、设备独立像素、dpr、ppi 之间的区别

文章目录 一、背景二、介绍CSS像素设备像素设备独立像素dprppi 三、总结参考文献 一、背景 在css中我们通常使用px作为单位&#xff0c;在PC浏览器中css的1个像素都是对应着电脑屏幕的1个物理像素 这会造成一种错觉&#xff0c;我们会认为css中的像素就是设备的物理像素 但实…

Matlab/simulink基于vsg的风光储调频系统建模仿真(持续更新)

​ 1.Matlab/simulink基于vsg的风光储调频系统建模仿真&#xff08;持续更新&#xff09;