Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/extjs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
包含其他Makefile的Makefile的执行流程_Makefile_Gnu Make - Fatal编程技术网

包含其他Makefile的Makefile的执行流程

包含其他Makefile的Makefile的执行流程,makefile,gnu-make,Makefile,Gnu Make,1) 假设makefile-1包含另一个makefile-2,makefile-2包含另一个makefile-3,makefile执行流如何工作 2) 如果包含的makefiles包含一些规则和变量,这三者都应该使用,那么它是如何工作的呢?如果一个文件多次包含同一个makefile,会发生什么情况 3) 对包含的makefile的变量使用导出?-它们是否在所有makefile中都可用 我的理解是什么,, makefile解释器(或者我不知道这里哪个术语更适合)在makefile中读取为行,如果有

1) 假设makefile-1包含另一个makefile-2,makefile-2包含另一个makefile-3,makefile执行流如何工作

2) 如果包含的makefiles包含一些规则和变量,这三者都应该使用,那么它是如何工作的呢?如果一个文件多次包含同一个makefile,会发生什么情况

3) 对包含的makefile的变量使用导出?-它们是否在所有makefile中都可用

我的理解是什么,, makefile解释器(或者我不知道这里哪个术语更适合)在makefile中读取为行,如果有任何include指令,它将使所有变量/规则在makefile中可用(顶级make,包括其他)

4) 但若包含的两个makefile重写了彼此的变量或规则,会发生什么呢? 是否最后包含的makefile具有优先权

5) 如果包含的makefile中的任何规则调用顶级makefile的规则,它是否完全执行顶级makefile(从第一行开始)

6) make中有两种作业:

i) 使用时扩展(=)

ii)在声明时扩展(:=) 这类变量在多级生成文件中如何处理

7) 如果在创建列表时使用gnumake的函数notdir、patsubt,会发生什么

File = abc def ghi 
File += $(notdir ghi/jkl)
这个notdir调用什么时候发生

(and also if I use ':=' what will be the difference ?)
假设make包含以下规则,它是否在解决依赖关系时被调用

rule : File

当包含makefile时,不会发生任何特殊的WRT排序。要生成,就好像构建了一个大的makefile,其中包含的makefile的内容被插入父makefile中出现的
include
语句的位置,然后将一个大的makefile传递给make

因此,重写内容(变量等)的规则与重写单个makefile中的变量的规则相同:变量的每个后续赋值将替换先前赋值的值

如果使用目标的配方定义(单冒号)规则,然后稍后再次执行,则会收到一条错误消息并使其忽略其中一条

在任何makefile中列出的第一个显式目标(包括或不包括)将是默认目标

等等

记住make永远不会完全“执行”任何makefile。Make不像shell脚本那样是一种过程语言。它首先解析所有的makefile并在内部构造一个依赖关系图。然后,它选择一个或多个默认目标,并从每个目标开始遍历图形的各个部分

编辑:


如果以上这些不能帮助你回答其他问题,那么我认为你应该做一点实验。试试看会发生什么!这比要求我们解释要容易得多,而且如果你自己弄明白,你会更好地理解它。

当你说make从不完全执行任何makefiles时,它是否也适用于包含的makefiles,如果是这样的话,那么它是如何决定是否应该执行任何变量的声明/定义语句行的,通常我们不会对变量使用任何依赖关系。我所说的“从不完全执行”是指make解析所有makefile。但make并不一定构建所有目标。Make将从第一个目标(或您在命令行上给出的目标)开始,并构建其先决条件及其先决条件等。但是,如果存在不是初始目标集先决条件的目标,则不会构建这些目标。目标并不是按照它们在makefile中出现的顺序来考虑的:它们是按照先决条件的顺序来考虑的。虽然我问题中的大部分问题都没有得到回答,但我自己解决了。在这里完整地写下来是很典型的,最好参考GNU makefile手册,它逐渐帮助我理解make方法。我感谢所有的评论,因为它帮助我朝着正确的方向前进。