Makefile中include、-include、sinclude的区别

如果指示符“include”指定的文件不是以斜线开始(绝对路径,如/usr/src/Makefile...),而且当前目录下也不存在此文件;make将根据文件名试图在以下几个目录下查找:首先,查找使用命令行选项“-I”或者“--include-dir”指定的目录,如果找到指定的文件,则使用这个文件;否则继续依此搜索以下几个目录(如果其存在):“/usr/gnu/include”、“/usr/local/include”和“/usr/include”。

当在这些目录下都没有找到“include”指定的文件时,make将会提示一个包含文件未找到的告警提示,但是不会立刻退出。而是继续处理Makefile的后续内容。当完成读取整个Makefile后,make将试图使用规则来创建通过指示符“include”指定的但未找到的文件,当不能创建它时(没有创建这个文件的规则),make将提示致命错误并退出。会输出类似如下错误提示:

Makefile:错误的行数:未找到文件名:提示信息(No such file or directory

Make: *** No rule to make target ‘’. Stop

通常我们在Makefile中可使用“-include”来代替“include”,来忽略由于包含文件不存在或者无法创建时的错误提示(“-”的意思是告诉make,忽略此操作的错误。make继续执行)。像下边那样:

-include FILENAMES...

使用这种方式时,当所要包含的文件不存在时不会有错误提示、make也不会退出;除此之外,和第一种方式效果相同。以下是这两种方式的比较:

使用“include FILENAMES...”,make程序处理时,如果“FILENAMES”列表中的任何一个文件不能正常读取而且不存在一个创建此文件的规则时make程序将会提示错误并退出。

使用“-include FILENAMES...”的情况是,当所包含的文件不存在或者不存在一个规则去创建它,make程序会继续执行,只有真正由于不能正确完成终极目标的重建时(某些必需的目标无法在当前已读取的makefile文件内容中找到正确的重建规则),才会提示致命错误并退出。

为了和其它的make程序进行兼容。也可以使用“sinclude”来代替“-include”(GNU所支持的方式)。

时间: 2024-11-16 14:00:19

Makefile中include、-include、sinclude的区别的相关文章

jsp中的@include与jsp:include有什么区别

1 前言 搞java开发的人也许都知道在jsp中引入项目中其他文件有如下两种方式 <%@include file="xxx.jsp"%> <jsp:include page="xxx.jsp"></jsp:include> 我们也许会使用这两种方式,但是也许很多人不名称这两种方式的区别.下面我们来看看下面的两个例子 2 开门见山引出问题 (1) /include/include.jsp <%@ page language=&

Ruby中require、load、include、extend的区别介绍

  这篇文章主要介绍了Ruby中require.load.include.extend的区别介绍,require.load用于文件,如.rb等等结尾的文件,include.load则用于包含一个文件中的模块,需要的朋友可以参考下 require,load用于文件,如.rb等等结尾的文件.include,load则用于包含一个文件中的模块. require 一般情况下用于加载库文件,而load则用于加载配置文件. 1.require:加载一个库,并且只加载一次,如果多次加载会返回false.只有当

PHP中include()与require()的区别说明_php技巧

require 的使用方法如 require("MyRequireFile.php"); .这个函数通常放在 PHP 程序的最前面,PHP 程序在执行前,就会先读入 require 所指定引入的文件,使它变成 PHP 程序网页的一部份.常用的函数,亦可以这个方法将它引入网页中. include 使用方法如 include("MyIncludeFile.php"); .这个函数一般是放在流程控制的处理部分中.PHP 程序网页在读到 include 的文件时,才将它读进

JSP中的include有几种形式?都有什么区别?_JSP编程

JSP中的include有哪些?有什么区别? 1.JSP中的include有哪些 (1)<%@include file="" %> (2)<jsp:include page="" flush="true"/> 2.两者区别 (1)前者是指示元素,后者是行为元素 (2)前者合成一个页面,后者合成一个文件后被JSP容器转化成Servlet

再讲php中require(),include(),require_once()和include_once()他们的区别

引用文件的方法有两种:require 及 include.两种方式提供不同的使用弹性. require 的使用方法如 require("MyRequireFile.php"); .这个函数通常放在 PHP 程序的最前面,PHP 程序在执行前,就会先读入 require 所指定引入的文件,使它变成 PHP 程序网页的一部份.常用的函数,亦可以这个方法将它引入网页中. include 使用方法如 include("MyIncludeFile.php"); .这个函数一般

-include和sinclude 作用

-include和sinclude   如果有文件没有找到的话,make会生成一条警告信息,但不会马上出现致命错误.它 会继续载入其它的文件,一旦完成makefile的读取,make会再重试这些没有找到,或 是不能读取的文件,如果还是不行,make才会出现一条致命信息.如果你想让make不 理那些无法读取的文件,而继续执行,你可以在include前加一个减号"-".   如:-include <filename>   其表示,无论include过程中出现什么错误,都不要报错

ASP中处理#include (我不知道有没有人贴过,如果有的话,不要骂我)我也没有仔细看

include 813     在ASP中处理#include 文件与用编译高级编程语言,如C/C++处理包含文件,这两种方法之间有两个主要区别.第一,ASP不从最终形成的ASP文件中移走那些未涉及到的信息.这是因为ASP独立于脚本引擎,不过多地进行代码分析.大体说来,如果遇到了ASP文件的基本语法请求,信息就被缓存(假定缓冲器是打开的)并被发送到适当的脚本引擎,进行进一步的分解.标记及执行.     除了这个"死码"问题,ASP包含文件与编译语言之间的另一个区别在于:每个ASP文件都

PHP学习:include()和require()的区别

include()和require()的区别 这相信是PHP中最基本的问题了,也是很多公司面试时必考的题呵呵. 给大家复习一下: require() :如果文件不存在,会报出一个fatal error.脚本停止执行 include() : 如果文件不存在,会给出一个 warning,但脚本会继续执行 这里特别要注意的是:使用include()文件不存在时,脚本继续执行,这种情况只出现在PHP 4.3.5之前,这一点,往往被人忽视. 推荐使用require_once()和include_once(

ASP中处置#include

ASP中处理#include ASP中处理#include 在ASP中处理#include 文件与用编译高级编程语言,如C/C++处理包含文件,这两种方法之间有两个主要区别.  第一,ASP不从最终形成的ASP文件中移走那些未涉及到的信息.这是因为ASP独立于脚本引擎,不过多地进行代码  分析.大体说来,如果遇到了ASP文件的基本语法请求,信息就被缓存(假定缓冲器是打开的)并被发送到适当  的脚本引擎,进行进一步的分解.标记及执行. 除了这个"死码"问题,ASP包含文件与编译语言之间的