Makefile基础教学(include的使用方法)

简介: Makefile基础教学(include的使用方法)

前言

本篇文章将讲解include的使用方法,在C语言中使用include是包含头文件,那么在makefile当中使用include的作用是什么呢?


一、include在makefile中的概念介绍

在 Makefile 中,include 用于在当前 Makefile 中包含另一个 Makefile 或者一个设置环境变量的脚本。可以使用 include 将一个大型的 Makefile 分成多个小的 Makefile,方便维护和管理。

include 可以在 Makefile 的任意位置使用。它会读取并处理指定文件中的命令和变量,然后将它们合并到当前的 Makefile 中。


二、include使用示例

下面使用了include来包含了makefile1这个文件。

makefile:

include makefile1
all : 
  @echo "this is all"

makefile1:

test : 
  @echo "this is test-makefile1"

运行结果:

这里使用了include包含makefile1其实和C语言中的效果是一样的,就是将makefile1中全部的代码搬运到makefile中。

等效于:

test : 
  @echo "this is test-makefile1"
all : 
  @echo "this is all"

三、include中需要注意的一些操作

1. 在include前加-选项

在 include 前加 - 选项来忽略不存在的文件,不会导致 Make 命令执行失败。具体来说,加上 - 选项后,如果所包含的文件不存在,Make 会将其视为一个空文件,而不会产生错误信息。

-include nullfile
all : 
  @echo "this is all"

运行结果:

2. include触发规则创建了文件会发生什么

单看makefile中的内容会认为最后的结果是会执行到this is all,但是结果却不是这样。

.PHONY : all
-include test.txt
all : 
  @echo "this is all"
test.txt :
  @echo "creating $@ ..."
  @echo "other : ; @echo "this is other" " > test.txt

运行结果:

这是因为在test.txt下的命令创建出了test.txt这个文件,并且test.txt这个文件里面的内容为@echo "this is other,当创建好后include又会继续将test.txt这个文件里面的内容包含到当前的makefile当中。

3. include包含的文件夹存在

这里我们首先将test.txt和b.txt都创建了出来,按照之前学习过的当test.txt存在时,就不会执行相应目标下的命令了。

.PHONY : all
-include test.txt
all : 
  @echo "this is all"
test.txt : b.txt
  @echo "creating $@ ..."

执行结果:

结果还是执行了test.txt中的内容,这又是为什么?

当目标文件存在

将目标文件包含进当前makefile。

以目标文件名查找是否有对应规则。

比较规则的依赖关系,绝对是否执行规则的命令。

上面的代码就是检测到存在test.txt这个规则,比较后发现b.txt比test.txt更新那么就会执行对应的命令了。


总结

本篇文章讲解了include的使用,在makefile中使用include 可以带来很多便捷,但是有的时候使用错误也会导致很多问题,希望大家牢记本篇文章中讲解到的知识点。


相关文章
|
6月前
|
编译器 Shell Linux
Makefile(3)进阶
Makefile(3)进阶
51 0
|
vr&ar
Makefile基础教学(预定义变量)
Makefile基础教学(预定义变量)
123 0
|
5月前
|
Unix Linux 编译器
程序与技术分享:cmake使用方法详解
程序与技术分享:cmake使用方法详解
56 0
|
6月前
|
编译器 程序员 C语言
C语言进阶教程(include只能包含.h文件吗?)
C语言进阶教程(include只能包含.h文件吗?)
115 0
|
Shell
如何使用makefile
如何使用makefile
|
设计模式 安全 机器人
学习Boost二:从附录3来看编码习惯
状态设计模式则是更加上一层,从具体的代码逻辑层次调升到了面对对象实现方式,它有更好的可扩展性(增加继承子类),更好的私密性(单独类内管理,彼此分割),更贴合低耦合、高内聚的方式。
38 0
|
编译器 C语言
进阶C语言 第七章-------《程序的编译(预处理操作)+链接》 (预编译、编译、汇编、#define、条件编译,#include的包含)知识点+完整思维导图+基本练习题+深入细节+通俗易懂建议收藏(二)
进阶C语言 第七章-------《程序的编译(预处理操作)+链接》 (预编译、编译、汇编、#define、条件编译,#include的包含)知识点+完整思维导图+基本练习题+深入细节+通俗易懂建议收藏(二)
进阶C语言 第七章-------《程序的编译(预处理操作)+链接》 (预编译、编译、汇编、#define、条件编译,#include的包含)知识点+完整思维导图+基本练习题+深入细节+通俗易懂建议收藏(三)
进阶C语言 第七章-------《程序的编译(预处理操作)+链接》 (预编译、编译、汇编、#define、条件编译,#include的包含)知识点+完整思维导图+基本练习题+深入细节+通俗易懂建议收藏(三)