【树莓派】Makefile的编写

版权声明:本文为博主原创文章,转载请注明出处。 https://www.cnblogs.com/YaoYing/p/12167789.html

Makefile的编写规范

main.c 主程序入口

#include <stdio.h>
#include "a.h"

int main()
{
	printf("This is main
");

	test();

	return 0;
}

a.c 被调用函数

#include <stdio.h>

void test()
{
	printf("This is a
");
}

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
如有错误之处,请评论或者私信指出,非常感谢

原文地址:https://www.cnblogs.com/YaoYing/p/12167789.html