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

相关推荐
Yana.nice7 小时前
Linux 只保留 30 天内日志(find命令删除日志文件)
linux·运维·chrome
DFT计算杂谈11 小时前
无 Root 权限在 Tesla K80 零门槛部署 DeepSeek 大模型
linux·服务器·网络·数据库·机器学习
Zhang~Ling12 小时前
从 fopen 到 struct file:从零开始拆解 Linux 文件 I/O
linux·运维·服务器
DeeplyMind12 小时前
Linux 深入 per-VMA lock:Linux 缺页路径如何摆脱 mmap_lock
linux·per-vma lock
爱写代码的森12 小时前
蒙三方库 | harmony-utils之FileUtil文件重命名与属性查询详解
linux·运维·服务器·华为·harmonyos·鸿蒙·huawei
XMAIPC_Robot13 小时前
软硬协同实时控制|RK3588业务调度+FPGA硬件时序,ethercat实现半导体设备微秒级响应(125us)
linux·arm开发·人工智能·fpga开发
重生的黑客13 小时前
Linux 进程优先级、切换与调度:从孤儿进程到 O(1) 调度模型
linux·运维·服务器·进程优先级·nice
骑上单车去旅行15 小时前
MD5校验对比脚本
linux·服务器·windows
平生幻15 小时前
Linux 常用命令
linux
ShirleyWang01216 小时前
让headlamp控制台能访问
linux·服务器·python·k8s·k3s