嵌入式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只有第一个目标是默认执行的主角,其他所有目标都是零件或备用命令,不手动调用就绝不执行!

相关推荐
DigitalOcean30 分钟前
Omarchy 将研发基础设施迁移至 DigitalOcean 云平台
linux·agent
牢姐与蒯35 分钟前
Linux文件(一).前传之基础IO
linux·运维·服务器
码不停蹄Zzz1 小时前
linux驱动程序入门2
linux
ShineWinsu1 小时前
对于MySQL:内置函数的解析
linux·数据库·c++·mysql·面试·函数·查询
万物智能信息科技2 小时前
RK3568 的多路显示移植—【万物智能之开源鸿蒙OpenHarmony系统实战开发系列教程】
linux·开发语言·华为·开源·harmonyos
IT菜鸟程2 小时前
Ubuntu 下 apt 版 Nginx 升级为源码编译版本完整操作指南(1.24.0 → 1.30.4 实战)
linux·nginx·ubuntu
新时代牛马2 小时前
Linux 磁盘管理:分区、文件系统、挂载与扩容
linux·运维·服务器
weixin_402486342 小时前
VS Code Codex/Claude Extension 无法安装 / 无法正常打开
linux·服务器·vscode
奋斗的阿狸_19863 小时前
ch32v003j4m6+ws2812b方案2:规划引脚定义
linux
Mr-Apple3 小时前
系统找不到指定的文件-CreateInstance/CreateVm/HCS/ERROR_FILE_NOT_FOUND
linux·windows·ubuntu·wsl