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

相关推荐
BUG_MeDe15 分钟前
从Json对象中提取某个对象的一点注意--libjson-c
linux·json
坚持就完事了37 分钟前
Linux的which命令
linux·运维·服务器
skywalk816338 分钟前
kitto_plus报错:AttributeError: module ‘kotti_plus‘ has no attribute ‘security‘
linux·开发语言·python
和小潘一起学AI38 分钟前
centOS安装neo4j
linux·运维·服务器
HealthScience1 小时前
H20服务器多卡运行有错误gpu_partition ,tmux错误
linux·运维·服务器
_Emma_1 小时前
【Raspberry PI】Raspberry Pi HEVC (H.265) 硬件解码器
linux·驱动开发·视频编解码
RisunJan1 小时前
Linux命令-netstat(查看Linux中网络系统状态信息)
linux·运维·服务器
Hello.Reader1 小时前
双卡 A100 + Ollama 生产部署从安装、踩坑、调优到最终可上线方案
linux·人工智能·算法
SPC的存折1 小时前
1、MySQL数据库基础
linux·运维·数据库·mysql
无忧.芙桃1 小时前
进程之环境变量
linux·运维·服务器