makefile编译文件

参考链接:https://www.bilibili.com/video/BV1hE411N7BK?from=search&seid=7021460025334894092&spm_id_from=333.337.0.0

  1. 文件中拥有Makefile和makefile,使用命令make优先运行的是小写的makefile。

  2. 创建了五个文件:main.ctool1.ctool1.htool2.ctool2.h

    //main.c
    #include "tool1.h"
    #include "tool2.h"
    
    int main()
    {
    
       mytool1();
       mytool2();
       return 0;
    }
    
    //tool1.c
    #include <stdio.h>
    #include "tool1.h"
    
    void mytool1()
    {
    	printf("tool1 print\n");
    }
    
    //tool1.h
    #ifndef TOOL1_H__
    #define TOOL1_H__
    
    void mytool1();
    
    #endif
    
    //tool2.c
    #include <stdio.h>
    #include "tool2.h"
    
    void mytool2()
    {
    	printf("tool2 print\n");
    }
    
    //tool2.h
    #ifndef TOOL2_H__
    #define TOOL2_H__
    
    void mytool2();
    
    #endif
    
  3. makefile编译使用命令为:make

  4. clean功能可以使用命令:make clean

  5. makefile文件普通写法:

    mytool:main.o tool1.o tool2.o   # mytool为编译完的总目标也是可执行文件,依赖于main.o tool1.o tool2.o
    	gcc main.o tool1.o tool2.o -o mytool  
    
    main.o:main.c   #main.o依赖于main.c
    	gcc main.c -c -Wall -g -o main.o    #-c编译,-Wall警告,-g方便调试,-o指定名字mian.o  
    tool1.o:tool1.c  
    	gcc tool1.c -c -Wall -g -o tool1.o
    tool2.o:tool2.c
    	gcc tool2.c -c -Wall -g -o tool2.o
    
    clean:  #习惯性会加上删除
    	rm *.o mytool -rf
    

    写完makefile可以使用make进行编译,编译完成后生成可执行文件mytool,使用命令./mytool可以执行。

  6. makefile文件加变量:

    OBJS=main.o tool1.o tool2.o  #用变量OBJS代替main.o tool1.o tool2.o
    cc=gcc  #用变量cc代替gcc
    
    mytool:$(OBJS)  #用$(OBJS)代替main.o tool1.o tool2.o
    	$(cc) $(OBJS) -o mytool  #用$(CC)代替gcc
    
    main.o:main.c
    	$(cc) main.c -c -Wall -g -o main.o
    tool1.o:tool1.c
    	$(cc) tool1.c -c -Wall -g -o tool1.o
    tool2.o:tool2.c
    	$(cc) tool2.c -c -Wall -g -o tool2.o
    
    clean:
    	rm *.o mytool -rf
    
  7. makefile文件加变量和使用:

  OBJS=main.o tool1.o tool2.o
  cc=gcc
  CFLAGS+=-c -Wall -g  # +=不管前面发生什么,加上这个功能。用CFLAGS代替编译、警告、调试
  mytool:$(OBJS)
  	$(cc) $(OBJS) -o mytool
  	
  main.o:main.c
  	$(cc) main.c $(CFLAGS) -o main.o  #$(CFLAGS)代替-c -Wall -g
  tool1.o:tool1.c
  	$(cc) tool1.c $(CFLAGS) -o tool1.o
  tool2.o:tool2.c
  	$(cc) tool2.c $(CFLAGS) -o tool2.o
  
  clean:
  	$(RM) *.o mytool -r  #用大写的RM代替rm以及-rf
  1. makefile文件

    OBJS=main.o tool1.o tool2.o
    cc=gcc
    CFLAGS+=-c -Wall -g
    
    mytool:$(OBJS)
    	$(cc) $^ -o $@   #  $^为上一句中依赖的文件$(OBJS),  $@为上一句的目标文件mytools
    
    main.o:main.c
    	$(cc) $^ $(CFLAGS) -o $@
    tool1.o:tool1.c
    	$(cc) $^ $(CFLAGS) -o $@
    tool2.o:tool2.c
    	$(cc) $^ $(CFLAGS) -o $@
    
    clean:
    	$(RM) *.o mytool -r
    
  2. makefile的简化文件

OBJS=main.o tool1.o tool2.o
cc=gcc
CFLAGS+=-c -Wall -g

mytool:$(OBJS)
	$(cc) $^ -o $@
%.o:%.c  # %为通配符
	$(cc) $^ $(CFLAGS) -o $@

clean:
	$(RM) *.o mytool -r
  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值