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

智能推荐

邻接矩阵-建立图-程序员宅基地

文章浏览阅读358次。1.介绍图的相关概念  图是由顶点的有穷非空集和一个描述顶点之间关系-边(或者弧)的集合组成。通常,图中的数据元素被称为顶点,顶点间的关系用边表示,图通常用字母G表示,图的顶点通常用字母V表示,所以图可以定义为:  G=(V,E)其中,V(G)是图中顶点的有穷非空集合,E(G)是V(G)中顶点的边的有穷集合1.1 无向图:图中任意两个顶点构成的边是没有方向的1.2 有向图:图中..._给定一个邻接矩阵未必能够造出一个图

IAR调试程序闪退问题_iar在debug时停止工作-程序员宅基地

文章浏览阅读1.7k次。问题:IAR调试STM32程序,点击调试按钮后软件自动关闭,并弹出报错提示框解决:将调试的接口模式改为SWD模式即可。我的原先设置为JTAG模式。_iar在debug时停止工作

100M宽带是多少网速_100m的宽带网速是多少兆-程序员宅基地

文章浏览阅读742次。100兆宽带的网速通常指的是每秒可以传输的数据量为100兆比特(Mb)。在此情况下,1兆比特(Mb)等于100万比特(Mbps),而1字节(B)等于8比特(bps)。因此,100兆宽带的网速可以计算如下:100兆比特/秒=100/8 兆字节/秒= 12.5兆字节/秒所以,100兆宽带的网速约为12.5MBps(兆字节/秒),也可以说为100Mbps(兆比特/秒)。但是需要注意的是,实际的下载和上传速度可能受到各种因素的影响,如网络拥堵、设备性能等。因此,实际使用中您可能会感受到较低的速度。_100m的宽带网速是多少兆

Windows 7 通用 CDC 串口驱动程序_cdcserial驱动 win7-程序员宅基地

文章浏览阅读2.4w次,点赞13次,收藏44次。Windows 7 通用 CDC 串口驱动程序Windows 7 自带 CDC 串口类设备的驱动程序文件 usbser.sys,所缺的是驱动配置文件 usbser.inf 文件,将 Windows 10 的 usbser.inf 文件拷贝到 Windows 7,注释掉 SourceDisksNames 和 SourceDisksFiles 部分就可以作为 Windows 7 的 CDC 串口类..._cdcserial驱动 win7

AI遮天传 NLP-词表示_nlp中词语的表示-程序员宅基地

文章浏览阅读2.5k次,点赞53次,收藏51次。NLP-词表示_nlp中词语的表示

sed 替换多个空格为一个-程序员宅基地

文章浏览阅读2.4k次。sed -i 's/[ ][ ]*/ /g' file.txt _sed 多个空格替换为1个

随便推点

什么是算法?-程序员宅基地

文章浏览阅读1.7w次,点赞15次,收藏129次。算法(algorithm)是解决一系列问题的清晰指令,也就是,能对一定规范的输入,在有限的时间内获得所要求的输出。 简单来说,算法就是解决一个问题的具体方法和步骤。算法是程序的灵 魂。二、算法的特征1.可行性 算法中执行的任何计算步骤都可以分解为基本可执行的操作步,即每个计算步都可以在有限时间里完成(也称之为有效性) 算法的每一步都要有确切的意义,不能有二义性。例如“增加x的值”,并没有说增加多少,计算机就无法执行明确的运算。 _算法

【网络安全】网络安全的标准和规范_网络安全标准规范-程序员宅基地

文章浏览阅读1.5k次,点赞18次,收藏26次。网络安全的标准和规范是网络安全领域的重要组成部分。它们为网络安全提供了技术依据,规定了网络安全的技术要求和操作方式,帮助我们构建安全的网络环境。下面,我们将详细介绍一些主要的网络安全标准和规范,以及它们在实际操作中的应用。_网络安全标准规范

Windows上的巧克力味Chocolatey详解_chocolate怎么卸载-程序员宅基地

文章浏览阅读1.5k次。Chocolatey是什么?很简单,Chocolatey就是Windows系统的yum或apt-get。一、Chocolatey介绍Chocolatey是一款专为Windows系统开发的、基于NuGet的包管理器工具,类似于Node.js的npm,MacOS的brew,Ubuntu的apt-get,它简称为choco。Chocolatey的设计目标是成为一个去中心化的框架,便于开发_chocolate怎么卸载

关于Python的三个谎言,别再盲目学Python了_关于python 盲目-程序员宅基地

文章浏览阅读2.3w次,点赞177次,收藏741次。Python作为21世纪最火的编程语言,市面上各种学习视频层出不穷,关于Python的学习氛围也逐渐浓厚,Python固然简单好上手,但事实上Python也不是那么容易学习的。如果不采取正确的学习方式,很容易走入误区。关于Python的三个谎言,你一定要清楚。1: 学完Python,并不能立马拿一两万的工资,甚至可能找不到工作!2:Python也没有那么简单,不是有手就行!3:别想着1个星期、2个星期就能学会,你至少得腾出一两个月来连续学习!如果你还是执意要学Python,那么好,接下来我们看看怎._关于python 盲目

js 实现将json数据导出到excel表格-程序员宅基地

文章浏览阅读2.1k次。方法一将table标签,包括tr、td等对json数据进行拼接,将table输出到表格上实现,这种方法的弊端在于输出的是伪excel,虽说生成xls为后缀的文件,但文件形式上还是html,代码如下<html><head> <p style="font-size: 20px;color: red;">使用table标签方式将json导出xls文件</p..._如何把js数据转换成表格

IEEE协会会员权益,注册IEEE会员有必要了解下_ieee会员好处-程序员宅基地

IEEE协会是一个专注于航空与电子系统领域的组织,注册IEEE会员可以享受许多权益,包括免费访问协会资源中心和参加各种会议及活动。