重新学习makefile

今天回顾了一下makefile,做下笔记;

首先准备几个简单的文件

add.c  head.h  main.c mul.c  sub.c

然后第一版 makefile

app:sub.c add.c mul.c main.c             

    gcc main.c sub.c add.c mul.c -o app  

然后第二版:

app:add.o sub.o main.o mul.o            
    gcc sub.o add.o mul.o main.o -o app 
                                        
sub.o:sub.c                             
    gcc -c sub.c -o sub.o               
add.o:add.c                             
    gcc -c add.c -o add.o               
mul.o:mul.c                             
    gcc -c mul.c -o mul.o               
main.o:main.c                           

    gcc -c main.c -o main.o      


然后第三版:

makefile 的语法跟shell 很像 

src = add.c main.c mul.c sub.c    
obj = add.o sub.o mul.o main.o    
                                
app:$(obj)                        
    gcc $(obj) -o app             
                                  
sub.o:sub.c                       
    gcc -c sub.c -o sub.o         
add.o:add.c                       
    gcc -c add.c -o add.o         
mul.o:mul.c                       
    gcc -c mul.c -o mul.o         
main.o:main.c                     
    gcc -c main.c -o main.o       
                                  
clean:                            

    rm -rf $(obj) app           

第四版:

目标:依赖 

    (tab)条件

$@:表示规则中的目标 

$<:表示规则中的第一个条件 

$^:表示规则中的所有条件,组成一个列表,以空格隔开,如果这个列表中有重复的项则消除重复项

  src = add.c main.c mul.c sub.c  
obj = add.o sub.o mul.o main.o  
                                
ALL:app                         
                                
app:$(obj)                      
    gcc $^ -o $@                
                                
sub.o:sub.c                     
    gcc -c $<  -o $@            
add.o:add.c                     
    gcc -c $<  -o $@            
mul.o:mul.c                     
    gcc -c $<  -o $@            
main.o:main.c                   
    gcc -c $<  -o $@            
                                
clean:                          

    rm -rf $(obj) app       


第五版:

src = $(wildcard *.c) 找到当前目录下所有后缀为.c的文件,赋值给src 

obj = $(patsubst %.c,%.o, $(src)) 把src变量里所有后缀为.c的文件替换成.o

 src = $(wildcard *.c)             
                                   
 obj = $(patsubst %.c, %.o, $(src))
                                   
                                   
 app:$(obj)                        
     gcc $^ -o $@                  
 %.o:%.c                           
     gcc -c $< -o $@               
                                   
                                   
 clean:                            
     rm -rf $(obj) app             
                                   
 .PHONY: clean                         

       



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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值