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

news/2024/10/22 16:37:10/

文章目录

  • 前言
  • 一、include在makefile中的概念介绍
  • 二、include使用示例
  • 三、include中需要注意的一些操作
    • 1. 在include前加-选项
    • 2. include触发规则创建了文件会发生什么
    • 3. include包含的文件夹存在
  • 总结


前言

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

一、include在makefile中的概念介绍

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

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

二、include使用示例

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

include makefile1all : @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 nullfileall : @echo "this is all"

运行结果:
在这里插入图片描述

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

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

.PHONY : all-include test.txtall : @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.txtall : @echo "this is all"test.txt : b.txt@echo "creating $@ ..."

执行结果:
结果还是执行了test.txt中的内容,这又是为什么?
在这里插入图片描述
当目标文件存在
将目标文件包含进当前makefile。

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

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

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

总结

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


http://www.ppmy.cn/news/93117.html

相关文章

【计算机网络基础】辨析专题⑤ 运输层

文章目录 重要简写重要概念重要简写 1.UDP——用户数据报协议 2.TCP——传输控制协议 3.API——应用编程接口 4.ARQ——自动重传请求 5.MSS——最大报文段长度 6.SACK——选择确认 7.AQM——主动队列管理 8.RED——随机早期检测 9.TCB——传输控制块 10.cwnd——拥塞窗口 11.R…

UC-OWOD: Unknown-Classified Open World Object Detection(论文翻译)

文章目录 UC-OWOD: Unknown-Classified Open World Object Detection摘要1.介绍2.相关工作3.未知分类的开放世界目标检测3.1 问题定义3.2 整体架构3.3 未知物体的检测3.4基于相似性的未知分类3.5未知聚类优化3.6训练和优化 4:实验4.1准备工作4.2结果和分析4.3消融研…

Streamlit应用程序使用Streamlit-Authenticator进行用户的安全身份验证实践(解决升级问题)

在Streamlit官方文档中,没有提供提供安全身份验证组件。目前,第三方streamlit-authenticator提供此功能,详见引用我原来的博文,在《Streamlit应用程序使用Streamlit-Authenticator进行用户的安全身份验证实践》文中,原…

Java-API简析_java.lang.Package类(基于JDK1.8)(浅析源码)

【版权声明】未经博主同意,谢绝转载!(请尊重原创,博主保留追究权) https://blog.csdn.net/m0_69908381/article/details/130806567 出自【进步*于辰的博客】 其实我的【Java-API】专栏内的博文对大家来说意义是不大的。…

RHCE 第五次作业

1.总结变量的类型及含义? 变量类型: 1,自定义变量: 在当前的shell命令行界面设置的变量是局部变量 例: num1 namezhangsan 含义:仅在当前shell生效. 2,环境变量: 全局变量,通过export 导出后的局部变量是全局变量 例: …

“Shell“SNAT,DNAT

文章目录 一.SNAT1.1 SNAT原理1.2 SNAT的应用环境1.3 SNAT工作原理1.4 进行SNAT转换后1.5 配置SNAT策略1.6SNAT实验 二.DNAT2.1 DNAT工作原理2.2 配置DNAT策略2.3 DNAT实验 一.SNAT 1.1 SNAT原理 SNAT原理:修改数据包的源地址。SNAT 应用环境:局域网主…

探讨一次订单拆单流程

欢迎大家关注公众号「JAVA前线」查看更多精彩分享文章,主要包括源码分析、实际应用、架构思维、职场分享、产品思考等等,同时欢迎大家加我微信「java_front」一起交流学习 1 文章概述 消费者在购物时,电商平台会生成订单。订单相当于是购物者…

本地提权漏洞分析【网络安全】

0. 前言 CVE-2023-21752 是 2023 年开年微软第一个有 exploit 的漏洞,原本以为有利用代码会很好分析,但是结果花费了很长时间,难点主要了两个:漏洞点定位和漏洞利用代码分析,欢迎指正。 1. 漏洞简介 根据官方信息&a…