【树莓派】Makefile的编写
版权声明:本文为博主原创文章,转载请注明出处。 https://www.cnblogs.com/YaoYing/p/12167789.html
Makefile的编写规范
main.c 主程序入口
#include <stdio.h>
#include "a.h"
int main()
{
printf("This is main\n");
test();
return 0;
}
a.c 被调用函数
#include <stdio.h>
void test()
{
printf("This is a\n");
}
a.h 被调用函数声明
#include <stdio.h>
void test();
我们就利用上述三个文件,实现Makefile的编写
第一个版本:编译-链接-生成可执行文件
main:
gcc -o main.o -c main.c
gcc -o a.o -c a.c
gcc -o main main.o a.o
输出结果:
pi@raspberrypi:~/test/make $ make
gcc -o main.o -c main.c
gcc -o a.o -c a.c
gcc -o main main.o a.o
pi@raspberrypi:~/test/make $ ./main
This is main
This is a
第二个版本:增加可删除中间件命令
main:
gcc -o main.o -c main.c
gcc -o a.o -c a.c
gcc -o main main.o a.o
clean:
rm -rf a.o main.o
输出结果:
pi@raspberrypi:~/test/make $ make clean
rm -rf a.o main.o
第三个版本:添加变量(类似于宏定义),当我们需要修改变量时只需修改一处即可
CC=gcc
main:
$(CC) -o main.o -c main.c
$(CC) -o a.o -c a.c
$(CC) -o main main.o a.o
clean:
rm -rf a.o main.o
输出结果:
pi@raspberrypi:~/test/make $ make
gcc -o main.o -c main.c
gcc -o a.o -c a.c
gcc -o main main.o a.o
第四个版本:添加依赖关系,make选择编译。如果某文件没有修改,则直接进行链接,无需重复编译。当编译工作量较大时,可以节省编译时间
CC=gcc
main:main.o a.o
$(CC) -o main main.o a.o
main.o:
$(CC) -o main.o -c main.c
a.o:
$(CC) -o a.o -c a.c
clean:
rm -rf a.o main.o
输出结果:
pi@raspberrypi:~/test/make $ make
gcc -o main main.o a.o
第五个版本:$@--目标文件;$^--所有的依赖文件;$<--第一个依赖文件。.c.o:
表示所有的.o文件都是依赖于相应的.c文件
CC=gcc
main:main.o a.o
$(CC) -o $@ $^
.c.o:
$(CC) -c $<
clean:
rm -rf *.o main
输出结果:
pi@raspberrypi:~/test/make $ make
gcc -c main.c
gcc -c a.c
gcc -c b.c
gcc -o main main.o a.o b.o
第六个版本:OBJS = $(SRCS:.c=.o)
将所有.c文件前缀文件名复制到.o文件名
CC=gcc
TARGET=main
SRCS=main.c a.c b.c
OBJS = $(SRCS:.c=.o)
$(TARGET):$(OBJS)
$(CC) -o $@ $^
.c.o:
$(CC) -c $<
clean:
rm -rf *.o main
输出结果:
pi@raspberrypi:~/test/make $ make
gcc -c main.c
gcc -c a.c
gcc -c b.c
gcc -o main main.o a.o b.o
更新日期20200616
如有错误之处,请评论或者私信指出,非常感谢