Makefile 之 include_makefile中 include了,源文件没有include-程序员宅基地

技术标签: 扩展  include  shell  Makefile 相关  makefile  filenames  bash  

  本节我们讨论如何在一个 Makefile 中包含其它的 makefile 文件。Makefile 中包含其它文件
的关键字是“include”
,和 C 语言对头文件的包含方式一致。

    “include”指示符告诉 make 暂停读取当前的 Makefile,而转去读取“include”指定的一
个或者多个文件,完成以后再继续当前 Makefile 的读取。Makefile 中指示符“include”书写在
独立的一行,其形式如下:

      include FILENAMES...

   FILENAMES 是 shell 所支持的文件名(可以使用通配符)。

   指示符“include”所在的行可以一个或者多个空格(make程序在处理时将忽略这些空格)开
始,切忌不能以 [Tab] 字符开始(如果一行以 [Tab] 字符开始 make 程序将此行作为一个命令行来处
理)。指示符“include”和文件名之间、多个文件之间使用空格或者 [Tab] 键隔开。行尾的空白字
符在处理时被忽略。使用指示符包含进来的 Makefile 中,如果存在变量或者函数的引用。它们将会
在包含它们的 Makefile 中被展开(详细可参考第五章 Makefile 中的变量)。

   来看一个例子,存在三个.mk 文件,
“$(bar)”被扩展为“bish bash” 。则
      include foo *.mk $(bar)
   等价于
      include foo a.mk b.mk c.mk bish bash
   make 程序在处理指示符 include 时,将暂停对当前使用指示符“include”的 makefile 文件
的读取,而转去依此读取由“include”指示符指定的文件列表。直到完成所有这些文件以后再回
过头继续读取指示符“include”所在的 makefile 文件。
   通常指示符“include”用在以下场合:
  1.  有多个不同的程序,由不同目录下的几个独立的Makefile来描述其创建或者更新规则。它
      们需要使用一组通用的变量定义(可参考 5.5 如何设置变量 一节)或者模式规则(可参
      考 9.5 模式规则一节)     。通用的做法是将这些共同使用的变量或者模式规则定义在一个文
      件中(没有具体的文件命名限制)             ,在需要使用的Makefile中使用指示符“include”来包
      含此文件。
  2.  当根据源文件自动产生依赖文件时;我们可以将自动产生的依赖关系保存在另外一个文件
      中,主Makefile使用指示符“include”包含这些文件。这样的做法比直接在主Makefile
      中追加依赖文件的方法要明智的多。其它版本的make已经使用这种方式来处理。                    (参考
      3.14 自动产生依赖 一节)
   如果指示符“include”指定的文件不是以斜线开始(绝对路径,如/usr/src/Makefile...)        ,
而且当前目录下也不存在此文件;make将根据文件名试图在以下几个目录下查找:首先,查找使
                                  (参考 8.7make的命令行选项 一节)指定的目录,如
用命令行选项“-I”或者“--include-dir”
果找到指定的文件,则使用这个文件;否则依此搜索以下几个目录(如果其存在)                             :
“/usr/gnu/include”“/usr/local/include”和“/usr/include”
                  、                                  。   当在这些目录下都没有找到“include”指定的文件时,make将会提示一个包含文件未找到的
告警提示,   但是不会立刻退出。        而是继续处理Makefile的内容。           当完成读取所有的makefile文件后,
make将试图使用规则来创建通过指示符“include”指定的但未找到的文件(参考 2.7 makefile
文件的重建一节)      ,当不能创建它时(没有创建这个文件的规则)                     ,make将提示致命错误并退出。
会输出类似如下错误提示:
     Makefile:错误的行数:未找到文件名:提示信息(No such file or directory)
     Make: *** No rule to make target ‘<filename>’. Stop
   我们可使用“-include”来代替“include”           ,忽略由于包含文件不存在或者无法创建时的错误
    “-”的意思是告诉 make,忽略此操作的错误。make 继续执行)
提示(                                                          。像下边那样:
     -include FILENAMES...
   使用这种方式时,当所要包含的文件不存在时不会有错误提示、make 也不会退出;除此之外,
和第一种方式效果相同。以下是这两种方式的比较:
   使用“include FILENAMES...”   ,make 程序处理时,如果“FILENAMES”列表中的任何一
个文件不能正常读取而且不存在一个创建此文件的规则时 make 程序将会提示错误并退出。
   使用“-include FILENAMES...”的情况是,当所包含的文件不存在或者不存在一个规则去创
建它,make 程序会继续执行,只有在因为 makefile 的目标的规则不存在时,才会提示致命错误
并退出。
   为了和其它的 make 程序进行兼容。也可以使用“sinclude”来代替“-include”                 (GNU 所支
持的方式)  
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/namecyf/article/details/7336851

智能推荐

谈谈前华为荣耀软件测试工程师校招面试(已拿到offer)_荣耀测试工程师机考题目-程序员宅基地

文章浏览阅读9.4k次,点赞3次,收藏26次。截止到现在,一共参加了2次笔试,2次面试,具体时间参照截图机试:一共三道编程题,共500分好像,全对了一道,就是提交后通过测试,另外两道写完了,但是提交测试没通过题目一:从一份人员名单中(限定5个),抽取幸运奖,人名的各个单词在26个英文字母的顺序累加起来为每个人的幸运值(a&A为1,b&B为2…),先挑选一名嘉宾XX,人后在参加抽奖的人员名单中选取一个人名幸运值与嘉宾XX的幸运值最接近的一个作为幸运奖,若果最接近的有多个以最后一个输入的名字优先。(人名长度不超过10,大小写处理_荣耀测试工程师机考题目

css的mediaquery查询几种不生效的原因_media- query 不生效-程序员宅基地

文章浏览阅读6.3k次。今天上午搞了半个小时,在webstrom中修改了css样式,用chrom浏览器浏览不生效,在网上查了半天,看是不是webstrom的有写保护,或者chorm浏览器不支持,最后发现少and后面少了一个空格导致css mediaquery查询不生效,即使在chrom中的network中css样式文件已经被加载了。@media screen and 不起作用原因汇总。首先确认是不是css本身的问题,而不..._media- query 不生效

Arduino 语法、函数使用、最常用函数、arduino教程、arduino笔记、参考手册_arduino常用函数手册-程序员宅基地

文章浏览阅读1w次,点赞38次,收藏194次。函数部分数字 I/OpinMode()描述将指定的引脚配置成输出或输入。详情请见digital pins。语法pinMode(pin, mode)参数pin:要设置模式的引脚mode:INPUT或OUTPUT返回无例子ledPin = 13 // LED连接到数字脚13 void setup() { pinMode(ledPin,OUTPUT);//设置数字脚为输..._arduino常用函数手册

MySQL数据库概览_后,我们首先就来看一下,mysql数据库中有多少个数据库(你可以理解为,mysql数据库是-程序员宅基地

文章浏览阅读257次。SQL语句分类:DCL: 数据控制语言 GRANT、DENY、REVOKEDDD: 数据定义语言 CREATE、ALTER、DROP、TRUNCATEDML: 数据操纵语言 SELECT、DELETE、UPDATE、SELECTMysql默认数据库有4个(version 5.7及8)mysql: mysql的核心数据库,类似于sql server中的master表,主要负责存储数据库的用户、权限设置、关键字等mysql自己需要使用的控制和管理信息。(常用的,在mysql.user表中_后,我们首先就来看一下,mysql数据库中有多少个数据库(你可以理解为,mysql数据库是

H3C S5500-52C-EI SSH 服务器发送了断开连接数据包_服务器发送了断开连接的数据包-程序员宅基地

文章浏览阅读2.9k次。H3C S5500-52C-EI SSH 服务器发送了断开连接数据包The connection is closed by SSH Server.(code:2)_服务器发送了断开连接的数据包

iOS-底层原理 21:Method-Swizzling 方法交换_ios方法交换 父类 死循环-程序员宅基地

文章浏览阅读1.3k次。iOS 底层原理 文章汇总method-swizzling 是什么?method-swizzling的含义是方法交换,其主要作用是在运行时将一个方法的实现替换成另一个方法的实现,这就是我们常说的iOS黑魔法,在OC中就是利用method-swizzling实现AOP,其中AOP(Aspect Oriented Programming,面向切面编程)是一种编程的思想,区别于OOP(面向对象编程)OOP和AOP都是一种编程的思想ios_lowLevelOOP编程思想更加倾向于对业务模块的._ios方法交换 父类 死循环

随便推点

【Python强化】使用pandas和csv读取csv文件_导入pandas库,读取data文件夹中的order.csv文件,编码格式为“gbk”,打印出所有列-程序员宅基地

文章浏览阅读1.1k次,点赞2次,收藏7次。一、pandas读取方式1、csv介绍csv文件是一种以逗号分割字符的文件形式我们创建一个简单的文件demo.csv,如下格式的形式进行存储,以,进行分割name,score,age,sexlhh,100,24,男wcy,99,28,女2.读文件直接读取import pandas as pd# 读取csv文件 全文件读取data = pd.read_csv('demo.csv',encoding="gbk") # 中文显示需要指定编码格式df = pd.DataFrame(_导入pandas库,读取data文件夹中的order.csv文件,编码格式为“gbk”,打印出所有列

Subdomain Visit Count_count,subdomain-程序员宅基地

文章浏览阅读171次。A website domain like "discuss.leetcode.com" consists of various subdomains. At the top level, we have "com", at the next level, we have "leetcode.com", and at the lowest level, "discuss.leetcode.com"..._count,subdomain

PyTorch深度学习遥感影像地物分类与目标检测、分割及遥感影像问题深度学习优化技术_深度学习框架遥感-程序员宅基地

文章浏览阅读930次,点赞2次,收藏8次。深度卷积网络采用“端对端”的特征学习,通过多层处理机制揭示隐藏于数据中的非线性特征,能够从大量训练集中自动学习全局特征(这种特征被称为“学习特征”),是其在遥感影像自动目标识别取得成功的重要原因,也标志特征模型从手工特征向学习特征转变。为使广大学者能理解卷积神经网络背后的数学模型和计算机算法,掌握利用PyTorch为基础的遥感影像地物分类,遥感图像目标检测,以及遥感图像目标分割等应用。1.现有几个优秀模型结构的演变原理,包括AlexNet,VGG,googleNet,ResNet,DenseNet等模型。_深度学习框架遥感

Oauth2.0 ( RFC-6749 ) 中文译文_rfc6749中文-程序员宅基地

文章浏览阅读1w次,点赞14次,收藏26次。本文为RFC6749(OAuth2.0)的中文翻译,本文在不影响原文语义的情况下尽可能地采用更符合中文习惯的方式进行表述,如有翻译不妥当的地方请在评论中指出。PS:有些过于简单,或者不适合翻译的内容直接以原文呈现,如11节往后,基本上能读懂英语单词就不会有阅读障碍,所以就不翻译了。PPS:有些明明能简单的表述出来的东西非要绕十八个弯写出来,搞学术的都是鬼才。。。本文由spawpaw@ho..._rfc6749中文

Java音乐播放器,窗体程序 完整源码_java音乐播放器源码-程序员宅基地

文章浏览阅读1.6k次,点赞2次,收藏20次。java 编写音乐播放器,窗体程序, 完整源码游戏,可以直接用来做课程设计或者毕业设计;代码功能完善,下载后可以直接运行!!_java音乐播放器源码

csgo准星设置代码_【老许教你玩CSGO】如何调整合适的准星参数-程序员宅基地

文章浏览阅读6.6k次。想要找到合适的准星,首先我们得知道调整准星的参数有哪些,这是最基本的准星调整方法,参数在网上一搜便可全部知晓。但是大家在面对一大串的准星参数时,完全是看花了眼,不知道以什么样的姿势来输入,这里我就来给大家整合一下,帮助更多的玩家能找到属于自己的那个准星。其实真正所需要的只有几个参数,只需要这几个便可完成准星的设置1 cl_crosshairsize 这个参数是用来设置准星的大小2 cl_cross..._csgo准星代码怎么用 csdn

推荐文章

热门文章

相关标签