让我们来嚼makefile: 自动推导功能

目的:

明白自动推导功能能干什么事。

场景:

当前目录下有两个文件 main.c和makefile;

其中main.c内容如下:

#include 
   
   
    
    
#include 
    
    
     
     


int main(int argc, char** argv)
{
        printf("functionName:  %s;  fileName: %s;  lineNumber:  %d\n" , __func__, __FILE__, __LINE__);
        return 0;
}

    
    
   
   


makefile内容如下:

CC=gcc
CFLAGS=-g
RM=rm
main:main.o
    $(CC) $(CFLAGS) -o $@ $^        
main.o:main.c
    $(CC) $(CFLAGS) -c $^
.PHONY=clean
clean:
    $(RM) main *.o

执行命令make

可以顺利进行编译,生成目标文件main.o 和可执行文件main。

make的自动推导功能: 只要make看到一个规则中的目标[.o]文件,它就会自动的把[.c]文件加在依赖中,在这个例子中,make找到一个main.o,那么main.c,就会被推导成main.o的依赖文件,并且 cc -c main.c 也会被推导出来。

简化后的makefile:

CC=gcc
CFLAGS=-g
RM=rm
main:main.o
    $(CC) $(CFLAGS) -o $@ $^
main.o:
.PHONY=clean
clean:
    $(RM) main *.o


执行make命令:



可以看出, 本来要写两行的东西(方框2里面),现在只要写一个main.o就可以了。 相当于make帮助了开发人员多干了一些活。

和目标clean不一样的是,目标clean所在的规则是有命令的,相同的是,也可以像执行make clean 一样直接执行make main.o就可以重建目标main.o.


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值