target=demos
CPPFLAGS=./include
path=./src
src=$(wildcard ./src/*.c)
obj=$(patsubst %.c, %.o, $(src))
$(target):$(obj)
gcc $^ -o $@
%.o:%.c
echo $<
gcc -c $< -I $(CPPFLAGS) -o $@
.PHONY:clean
clean:
-rm -rf $(path)/*.o app
不加任何其它语法的Makefile框架
文件目录框架
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/3f93dedbfffbefee27b2f37e3382736b.png#pic_center)
文件内容参考上一个Makefile博文,内容是一样的,内容不重要,重要的是文件结构目录以及Makefile文件。
Makefile
main:main.o add.o sub.o
gcc main.o add.o sub.o -o main
main.o:main.c
gcc -c main.c -o main.o
add.o:add.c
gcc -c add.c -o add.o
sub.o:sub.c
gcc -c sub.c -o sub.o
.PHONY:clean
clean:
rm *.o main
在上一个基础上增加变量的升级版本的Makefile框架
OBJS:=main.o add.o sub.o
CC:=gcc
CFLAGS:=-g -Wall -O2
main:$(OBJS)
$(CC) $(CFLAGS) $(OBJS) -o main
main.o:main.c
$(CC) -c main.c -o main.o
add.o:add.c
$(CC) -c add.c -o add.o
sub.o:sub.c
$(CC) -c sub.c -o sub.o
.PHONY:clean
clean:
rm *.o main
假如Makefile内置变量的框架
OBJS:=main.o add.o sub.o
CC:=gcc
CFLAGS:=-g -Wall -O2
main:$(OBJS)
$(CC) $(CFLAGS) $^ -o $@
main.o:main.c
$(CC) -c $< -o $@
add.o:add.c
$(CC) -c $< -o $@
sub.o:sub.c
$(CC) -c $< -o $@
.PHONY:clean
clean:
rm *.o main
在上一个版本的基础上优化
OBJS:=main.o add.o sub.o
CC:=gcc
CFLAGS:=-g -Wall -O2
main:$(OBJS)
$(CC) $(CFLAGS) $^ -o $@
.PHONY:clean
clean:
rm *.o main
最终Makefile框架
文件框架
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/caa031cf8059166273e3b8a2a5b28925.png#pic_center)
add.c下的Makefile文件
add.o:add.c
@gcc -c add.c -o add.o
@mv add.o ../out/
sub.c下的Makefile文件
sub.o:sub.c
@gcc -c sub.c -o sub.o
@mv sub.o ../out/
整个目录下的Makefile文件
main:main.o add.o sub.o
@make -C ./out
main.o:main.c
@gcc -c main.c -o main.o
@mv main.o ./out/
add.o:
@make -C ./add
sub.o:
@make -C ./sub
.PHONY:clean
clean:
@rm -rf ./out/*.o ./out/main
out目录下的 Makefile
CC = gcc
OBJS = main.o sub.o add.o
main:$(OBJS)
@$(CC) $^ -o $@
make后的文件框架
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/da5b8d854e71017ea8b3b73c744d3209.png#pic_center)