Makefile 理解(3)

 

make 是如何工作的
1、make target会在当前目录中查找Makefile 或者 makefile GNUmakefile 或者是自己用-f指定的文件(最好是Makefile)

2、找到后它会执行相应目标(如果没有target则默认执行第一个目标),并将这个目标作文最终目标

3、如果目标文件不存在或者目标依赖的文件修改时间新于目标文件修改时间,则执行这个命令生成新的目标

4、如果依赖存在而依赖在Makefile中也有作为target,就根据上边的规则生成依赖文件

Makefile中有五个规则:显示规则,隐式规则,变量,文件,注释
从简单的说起
注释: 以#开头的字串在一行内 如果需要换行则在行末 加 \ 表示下一行是接上一行的
显示规则: 用全部的命令说明如何生成目标(命令必须用tab键开头)
隐式规则: 利用make的自动推导能力,不给目标生成的命令,甚至不给目标,让他自己生成一些文件
变量: 类似C语言中的宏定义,在使用的时候展开
文件:

1、Makefile文件
2、include的文件 相当于将include的文件在此处打开
3、预编译的很多命令行 可以累世#define 来自定义一些命令行 在执行命令时候调用

  1. #config.mk  
  2. GCC = gcc  
  3. GXX = g++  
  4.   
  5. CFLAGS = -g -o  
  6. CCFLAGS = -g -o  
  1. <span style="font-family:Arial, Verdana, sans-serif;"><span style="white-space: normal;"></span></span><pre name="code" class="plain" style="margin: 4px 0px; background-color: rgb(240, 240, 240);">#Makefile  
  2. #remarks  
  3. include config.mk               #file include  
  4. OBJS := main.o fto.o start_fto.o gps_power.o    #变量  
  5. INC_FILE := fto.h gps_power.h           #  
  6. SOURCE := main.c fto.c start_fto.c gps_power.c  #  
  7.   
  8. .PHONY: all                 #伪目标  
  9. all: gpsrouter                            
  10. gpsrouter : $(OBJS)             #                 
  11.     $(GCC) $(CFLAGS) $@ $<               #显示规则  
  12.   
  13. $(OBJS): $(SOURCE) $(INC_FILE)            
  14. #使用隐式规则  
 

 

  在Makefile中也可以使用通配符 *.c 就表示对应目录下得所有文件以.c结尾的文件。在Makefile中如果用到相应文件,但文件找不到就会报错,在命令执行错误时也会报错make无法继续执行,比如在Makefile中需要新建一个目录而这个目录已经存在此时会报错并停止执行make而这个错误是可以容忍的,这时可以在命令的命令开头加‘-’符 或者在include前加‘-’就可以避免类似问题。

  1. #remarks  
  2. -include config.mk              #file include  if can't find the file skip  
  3. OBJS := main.o fto.o start_fto.o gps_power.o    #变量  
  4. INC_FILE := fto.h gps_power.h           #  
  5. SOURCE := main.c fto.c start_fto.c gps_power.c  #  
  6.   
  7. .PHONY: all                 #伪目标  
  8. all: gpsrouter                        
  9. gpsrouter : $(OBJS)             #                 
  10.     $(GCC) $(CFLAGS) $@ $<\  
  11.     -mkdir executable\  
  12.     cp $@ executable  
  13.   
  14. $(OBJS): $(SOURCE) $(INC_FILE)            
  15. #使用隐式规则
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值