Makefile的编译方式

Makefile

 

使用GCC的命令进行程序编译时,当程序是单个文件时编译是比较方便的,但当工程中的文件数目增多,甚至非常庞大,并且目录结构关系复杂时,便需要通过makefile来进行程序的编译。

示例:

目录MakeFile_Demo下有三个文件来合作进行加减乘除的计算

使用Makefile编译:

Makefile中代码格式:

目标对象:依赖对象

         要生成目标对象所执行的命令

Makefile文件中的代码分析为:

第1行:最终要生成的目标文件Calculate文件依赖于main.o文件和calculate.o文件

第2行:gcc方式编译代码,目标文件是Calculate,源文件是main.o和calculate.o

第3行:生成Calculate文件所依赖的文件main.o又依赖于main.c

第4行:gcc方式编译生成目标文件main.o

第5行:生成Calculate文件所依赖的文件calculate.o又依赖于calculate.c

第6行:gcc方式编译生成目标文件calculate.o

第7行:.PHONY后面的clean表示的是一个伪造的目标,并不是真正目标文件的依赖

第8行:目标对象clean不依赖于任何依赖对象,因为clean是一个伪目标

第9行:生成clean要执行的代码,即调用make clean命令时,执行代码rm –rf *.o Calculate

 

 

使用Makefile中特殊符号编译:

$@                             代表目标文件

$^                               代表所有的依赖文件

$<                               代表第一个依赖文件

执行过程和结果与第一种编译方式相同。

 

使用变量编译:

wildcard:获取匹配模式的文件名函数

格式:$(wildcard PATTERN)

此函数的功能是查找当前目录下所有符合模式PATTERN的文件名,其返回值是以空格分割的、当前目录下的所有符合模式PATTERN的文件名列表。

例如:返回当前目录下所有扩展名为.c的文件列表

$(wildcard *.c)

patsubst:模式替换函数

格式:$(patsubst pattern,replacement,text)

此函数的功能是查找字符串text中按照空格分割的单词,将符合模式pattern的字符串替换成replacement。函数的返回值是替换后的新字符串。

例如:将.c文件替换为.o文件

$(patsubst %.c,%.o,$(wildcard *.c))

输出的字符串将当前扩展名为.c的文件替换为.o的文件列表。

运行过程和结果与前两种方式相同。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值