嵌入式Linux学习-Makefile基本语法:目标、依赖、命令、伪目标.PHONY

本文知识点来自于正点原子、野火电子两平台的教学课程及其课件资料,如若侵权,请私信我删除。本文内容仅作为习题记忆,不包含过多makefile的格式说明。

复制代码
#Makefile 格式
#目标: 依赖的文件或其它目标
#Tab 命令 1
#Tab 命令 2

根据【正点原子】I.MX6U嵌入式Linux驱动开发指南V2.0.1.pdf中的p143页,使用Vi编辑器完成main.c、input.c、calcu.c、input.h、calcu.h文件的编写

进入Linux虚拟机后,右键打开终端设备

复制代码
sudo mkdir makefile
cd makefile
sudo mkdir part_1
cd part_1

在zwh@zwh-virtual-machine:~/makefile/part_1$路径下进行新建文件

例如:

复制代码
sudo vi main.c

main.c

复制代码
#include<stdio.h>
#include"input.h"
#include"calcu.h"

int main(int argc,char*argv[])
{
	int a,b,num;
	input_int(&a,&b);
	num = calcu(a,b);
	printf("%d * %d = %d\r\n",a,b,num);
}

input.c

复制代码
#include<stdio.h>
#include"input.h"

void input_int(int*a,int*b)
{
	printf("input two num:");
	scanf("%d %d",a,b);
	printf("\r\n");
}

calcu.c

复制代码
#include"calcu.h"

int calcu(int a,int b)
{
	return(a*b);
}

input.h

复制代码
#ifndef _INPUT_H
#define _INPUT_H

void input_int(int*a,int*b);
#endif

calcu.h

复制代码
#ifndef _CALCU_H
#define _CALCU_H

int calcu(int a,int b);
#endif

编写完以上五个基础文件后,在当前目录下创建makefile文件

复制代码
sudo vi makefile

进入vi编辑器后输入以下内容(注意,在第三行面前是使用tab键空出)

复制代码
.PHONY:clean
main:main.o input.o calcu.o
        gcc -o main main.o input.o calcu.o
main.o:main.c
        gcc -c main.c
input.o:input.c
        gcc -c input.c
calcu.o:calcu.c
        gcc -c calcu.c

clean:
        rm *.o
        rm main

执行sudo make即可执行makefile文件

执行完后,可以ls查看当前目录下出现了一个特殊颜色标记的main可执行文件

执行./ main可进行测试程序运行

复制代码
./main

输入ls main -l查看文件最新保存时间

复制代码
ls main -l

输入"sudo make 命令"该格式可单步运行makefile中的程序

复制代码
sudo make main.o

输入sudo make clean可清除当前目录下所有的.o结尾的文件,以及main可执行文件

总结:Makefile 管编译,.o 是缓存,main 是成品,clean 是大扫除,日常只 make,不删 .o

问1:为什么执行make后,clean不会继续被执行,而需要自行sudo make clean才能清理呢?

答1:Makefile只有第一个目标是默认执行的主角,其他所有目标都是零件或备用命令,不手动调用就绝不执行!

相关推荐
AOwhisky20 分钟前
Kubernetes 学习笔记:集群管理、命名空间与 Pod 基础
linux·运维·笔记·学习·云原生·kubernetes
小龙在慢慢变强..1 小时前
目录结构(FHS 标准)
linux·运维·服务器
2035去旅行1 小时前
嵌入式开发,如何选择C标准库
linux·arm开发
刘延林.1 小时前
win11系统下通过 WSL2 安装Ubuntu 24.04 使用RTX 5080 GPU
linux·运维·ubuntu
CodeOfCC2 小时前
Linux 嵌入式arm64安装openclaw
linux·运维·服务器
宵时待雨3 小时前
linux笔记归纳3:linux开发工具
linux·运维·笔记
magrich4 小时前
安装NoMachine并解决无外接显示器桌面黑屏
linux·运维·服务器
fish_xk4 小时前
Linus基础指令
linux·服务器
宁波阿成4 小时前
在ubuntu22.04源码级安装sub2api
linux·运维·ubuntu·ai·api·token·中转站
charlie1145141915 小时前
嵌入式Linux驱动开发(7) 从虚拟设备到真实硬件 —— LED驱动硬件基础
linux·开发语言·驱动开发·内核·c