Makefile

Makefile是什么?

gcc hello.c -o hello

gcc aa.c bb.c cc.c dd.c ...

make工具和Makefile

make和Makefile是什么关系?

make工具:找出修改过的文件,根据依赖关系,找出受影响的相关文件,最后按照规则单独编译这些文件。

Makefile文件:记录依赖关系和编译规则。

必须要学精Makefile吗?

怎么学习Makefile?

Makefile的本质:无论多么复杂的语法,都是为了更好地解决项目文件之间的依赖关系。

Makefile三要素是什么?

目标、依赖、命令

怎么描述三要素的关系?

目标:依赖的文件或者是其他目标

<tab>命令1

<tab>命令2

<tab>...

实验演示

.PHONY:可以指定伪目标

Makefile的变量、模式匹配

变量

系统变量

CC变量是Makefile的一个系统变量,指代编译器

自定义变量

=,延迟赋值

:=, 立即赋值

?=,空赋值

+=,追加赋值

自动化变量

$<:第一个依赖文件

$^:全部的依赖文件

$@:目标

模式匹配

%:匹配任意多个非空字符

shell:*通配符

默认规则

.o文件默认使用.c文件来进行编译

Makefile条件分支

条件分支

ifeq (var1,var2)
...
else
...
endif
ifneq (var1,var2)
...
else
...
endif

Makefile的常用函数

Makefie官方手册:

GNU Make Manual - GNU Project - Free Software Foundation

patsubst:

$(patsubst %.c,%.o,x.c.c bar.c)

把字符“x.c.c bar.c”中以.c结尾的单词替换成以.o结尾的字符。函数的返回结果是“x.c.o bar.o”

notdir:

$(notdir src/foo.c hacks)

返回值为:foo.c hacks

wildcard:

$(wildcard *.c)

返回值为当前目录下所有.c文件

foreach:

dirs :=a b c d

$(foreach dir,$(dirs),$(wildcard $(dir)/*))

返回值是dirs目录下的所有文件dir/*

Makefile解决头文件依赖

1、写一个头文件,并把头文件添加到编译器的头文件路径中。

gcc -I +"头文件"

2、实时检查头文件的更新情况,一旦头文件发生变化,应该要重新编译所有相关文件。

gcc -MM

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值