Linux(ubuntu)Makefile

news/2024/9/27 22:17:05 标签: linux

一、Makefile简介

Makefile的必要性:嵌入式开发要将Linux移植到开发版上,而开发版没有图形界面。只能用终端,我们可以用gcc,但是很不方便。而Makefile能解决这个问题。

二、Makefile下载

终端输入:sudo apt install -y build-essential

三、Makefile使用

1.新建文件,并命名为Makefile

或者,终端:vim Makefile

2.代码格式:

目标:前置依赖

\t(tab)代码

3.根据main.c和helloworld.c生成main

main.o:main.c helloworld.h

        gcc -c main.c

helloworld.o:helloworld.c helloworld.h

       gcc -c helloworld.c

main:main.o helloworld.o

        gcc main.o helloworld.o -o main

在Makefile输入以上代码后,在下面终端输入make就可以创造make文件

4.删除命令

clean:

        rm main.o helloworld.o

在Makefile输入以上代码后,在下面终端输入make clean就可以把main.o和hello.o文件删除

5.引入变量

设变量名为object

定义变量代码如下

object := main.o helloworld.o

使用变量代码如下

main:$(object)

        gcc $(object) -o main

以上代码和第3节作用一样,也可以根据第4节自行改变。

6.自动推导

假设我们没有main.i main.o helloworld.i helloworld.o等文件,我们可以直接从main.c和helloworld.c自动推导到main,并生成main.i这些文件。

例如直接输入:

main:main.o helloworld.o

        gcc main.o helloworld.o -o main

缺点:我们更改main.c或helloworld.c都能通过make重新编译。但是更改头文件helloworld.h重新编译没有变化。所以在使用时需要把带头文件的命令提出来。

在前面加上:main.o:helloworld.h

7.声明伪目标

clean就是系统一个伪目标,没有这个文件,但是能清除文件。

但是我们如果创建一个文件就叫clean,那么这个清除文件的作用就没了。所以就需要声明clean,代码如下:

.PHONY:clean

8.忽略错误

执行clean后,再次执行就会报错。说这个文件不存在。但是没有什么影响,我们如果不想让塔报错,在rm前面加个-即可。

9.名称对应

main:$(object)

        gcc $(object) -o main

其中,目标是main,

gcc $(object) -o main,也是生成main。

但是生成的文件以gcc这句为主,

如果gcc $(object) -o main123那么生成的就是main123这个文件。

但是我们不要这样,一定要前后对应。


http://www.niftyadmin.cn/n/5679680.html

相关文章

Unity中的GUIStyle错误:SerializedObject of SerializedProperty has been Disposed.

一运行就循环打印这个报错, 解决办法,每次改参数之后在HIerarchy中手动保存,就会停止循环打印,style中的字体也显示出来了, 或者 直接换个低版本的

excel数据常用函数学习记录

1、VLOOKUP查询函数,匹配数据返回 vlookup(查找值,查找范围,要查找的值在第几列,0表示精确查找) enter键返回 例如:在E列中返回,A列的值与D列一致的对应的B值。只会返回查找到的第一个 如果需要把查找到的匹配的数据都返回到单元格中&…

SpringCloud源码:客户端分析(二)- 客户端源码分析

背景 我们继续分析EurekaClient的两个自动化配置类: 自动化配置类功能职责EurekaClientAutoConfiguration配置EurekaClient确保了Eureka客户端能够正确地:- 注册到Eureka服务端- 周期性地发送心跳信息来更新服务租约- 下线时通知Eureka服务端- 获取服务实…

D14【python接口自动化学习】-python基础之内置数据类型

day14 字典的定义 学习日期:20240921 学习目标:内置数据类型--23 字典:如何处理映射类型的数据? 学习笔记: 映射与字典 字典的定义 字典的删除 练习 # 将以下两个列表转换成字典 list_name[name1,name2,name3] li…

Vulhub TheEther_1.0.1靶机详解

项目地址 https://download.vulnhub.com/theether/theEther_1.0.1.zip实验过程 将下载好的靶机导入到VMware中,设置网络模式为NAT模式,然后开启靶机虚拟机 使用nmap进行主机发现,获取靶机IP地址 nmap 192.168.47.1-254根据对比可知theEthe…

基于springboot+vue医院挂号就诊系统设计与实现

基于springbootvue医院挂号就诊系统设计与实现 springboot180基于spring boot的医院挂号就诊系统 摘 要 传统办法管理信息首先需要花费的时间比较多,其次数据出错率比较高,而且对错误的数据进行更改也比较困难,最后,检索数据费…

RabbitMQ的高级特性-消息确认机制

对于RabbitMQ发送消息到消费端的可靠性保障 引入:发送者发送消息后,到达消费端之后会出现一下两种情况: ①消息处理成功 ②消息处理异常 RabbitMQ向消费者发送消息之后, 就会把这条消息删掉, 那么第两种情况, 就会造成消息丢失&#xff0…

LLM Agent系列 | 端侧Agent路由器,合纵连横AI江湖,破局端侧大模型之困!

引言 简介 背景 相关工作 Octopus v4 Octopus v2 图中节点 基于图的任务规划 功能token和数据集收集 图系统设计 评测 专业模型 MMLU基准评估 实战 英文 中文示例1 中文示例2 总结 引言 若待上林花似锦,出门俱是看花人。 小伙伴们好,我是…