Makefile进阶得到最后的模板

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框架

文件目录框架

在这里插入图片描述

文件内容参考上一个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框架

文件框架

在这里插入图片描述

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后的文件框架

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值