Makefile 理解(3)

本文详细介绍了Make工具的工作原理,包括如何查找Makefile、执行目标规则、生成目标文件等过程。此外,还介绍了Makefile中的核心元素如显示规则、隐式规则、变量及通配符的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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 来自定义一些命令行 在执行命令时候调用

#config.mk GCC = gcc GXX = g++ CFLAGS = -g -o CCFLAGS = -g -o
#Makefile
#remarks
include config.mk				#file include
OBJS := main.o fto.o start_fto.o gps_power.o	#变量
INC_FILE := fto.h gps_power.h			#
SOURCE := main.c fto.c start_fto.c gps_power.c	#

.PHONY: all					#伪目标
all: gpsrouter							
gpsrouter : $(OBJS)				#				
	$(GCC) $(CFLAGS) $@ $<		        #显示规则

$(OBJS): $(SOURCE) $(INC_FILE) 			
#使用隐式规则


在Makefile中也可以使用通配符 *.c 就表示对应目录下得所有文件以.c结尾的文件。在Makefile中如果用到文件但文件找不到会报错,在命令执行错误时也会报错make无法继续执行,比如在Makefile中需要新建一个目录而这个目录已经存在此时会报错并停止执行make而这个错误是可以容忍的,这时可以在命令的命令开头加‘-’符 或者在include前加‘-’就可以避免类似问题。#remarks -include config.mk #file include if can't find the file skip OBJS := main.o fto.o start_fto.o gps_power.o #变量 INC_FILE := fto.h gps_power.h # SOURCE := main.c fto.c start_fto.c gps_power.c # .PHONY: all #伪目标 all: gpsrouter gpsrouter : $(OBJS) # $(GCC) $(CFLAGS) $@ $<\ -mkdir executable\ cp $@ executable $(OBJS): $(SOURCE) $(INC_FILE) #使用隐式规则

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值