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
    评论
Makefile是一种用于管理和自动化项目编译的文件。在实际使用过程中,一般是通过编写Makefile文件来定义整个项目的编译规则,然后使用make命令来解析该Makefile文件,实现项目的编译和管理。Makefile文件可以使用默认的文件名"Makefile",也可以使用其他的文件名如xxx.mk。默认情况下,make命令会在当前目录下按照一定的顺序查找Makefile文件。一旦找到Makefile文件,就会开始读取该文件并执行其中定义的编译规则。大多数的make工具都支持"makefile"和"Makefile"这两种默认文件名,同时也支持使用-f和--file参数来指定其他的文件名进行编译。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [编译Makefile基础知识](https://blog.csdn.net/Rsirlvx/article/details/119417571)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] - *2* *3* [Makefile编译——基础](https://blog.csdn.net/qq_50597556/article/details/128503426)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值