make工具和Makefile文件
make工具
- 解决源码文件过多的情况,使用make指令执行Makefile文件完成自动编译。
- 如果只修改某几个源文件,则只重新编译这几个源文件
- 如果修改头文件,则重新编译包含该头文件的源文件。
Makefile文件
实验案例
本次代码非常简单,包含5个文件
main.c
#include<stdio.h>
#include "calcu.h"
#include "inputdata.h"
int main()
{
int a,b,c;
input_data(&a,&b);
c = calculate(a,b);
printf("result:%d\r\n",c);
}
inputdata.c
#include<stdio.h>
#include"inputdata.h"
void input_data(int *a,int *b){
printf("input two nums");
scanf("%d %d",a,b);
}
inputdata.h
#ifndef _INPUTDATA_H
#define _INPUTDATA_H
void input_data(int *a,int *b);
#endif
calcu.c
#include<stdio.h>
#include"calcu.h"
int calculate(int a,int b){
return (a+b);
}
calcu.h
#ifndef _CALCU_H
#define _CALCU_H
int calculate(int a,int b);
#endif
gcc -o main main.c calcu.c inputdata.c
这样导致每次即使不修改代码也会重新进行编译。
我们希望的是:
1
我们该怎么做那?
- **可以先执行编译,然后在进行链接。**就和在IDE中进行开发一样。gcc编译选项不要从网上查,直接使用
gcc --help
查看命令。
我们在这里稍微补充下:-S Compile only; do not assemble or link -c Compile and assemble, but do not link -o <file> Place the output into <file>
因此,我们就有了接下来的代码
gcc -c main.c # 也可以这样gcc -o main.o -c main.c
gcc -c calcu.c
gcc -c inputdata.c
gcc -o main main.o calcu.o inputdata.o
这样的话,我们修改那个文件,就只需要先编译、汇编生成.o文件,接着再执行最后的链接操作即可。
然而这样也还是相当麻烦呀!
而make和Makefile就是用来解决上述代码过于繁多,从而简化命令!
编写Makefile文件
main: main.o inputdata.o calcu.o
gcc -o main main.o inputdata.o calcu.o
main.o: main.c
gcc -c main.c
inputdata.o: inputdata.c
gcc -c inputdata.c
calcu.o: calcu.c
gcc -c calcu.c
clean:
rm *.o
rm main
使用make main
用来生成可执行文件,使用make clean
删除可执行文件和.o文件
参考资料:
正点原子嵌入式Linux教材 ↩︎