本文知识点来自于正点原子、野火电子两平台的教学课程及其课件资料,如若侵权,请私信我删除。本文内容仅作为习题记忆,不包含过多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只有第一个目标是默认执行的主角,其他所有目标都是零件或备用命令,不手动调用就绝不执行!