1) makefile执行流是如何工作的,假设makefile-1包含另一个makefile-2,makefile-2包含另一个makefile-3?
2)如果包含的makefile包含一些规则和变量,这三种方法都应该使用--它是如何工作的?如果一个文件不止一次包含同一个makefile,会发生什么情况?
3)对包含makefile的变量使用导出吗?-在所有这些变量中都有makefile,
我的理解是,makefile解释器(或者我不知道哪个术语更适合这里)在makefile中以行形式读取,如果有任何include指令,则生成makefile中的所有变量/规则(顶级make--包括其他)。
但是,如果两个包含makefile的文件覆盖变量或彼此的规则,会发生什么呢?是否类似于最后一个包含makefile的优先项?
5)如果包含的makefile中有任何规则调用顶级makefile的规则,那么它是否完全执行顶级makefile (从第一行开始)?
6)有两种类型的任务:
( i)在使用时扩大(=)
(二)在声明时扩展(:=)这种变量是如何在多级生成文件中处理的?
7)当我创建一个列表时,如果我使用gnumake的函数如notdir,patsubt,会发生什么?
File = abc def ghi
File += $(notdir ghi/jkl)
什么时候会发生这种情况?
(and also if I use ':=' what will be the difference ?)
考虑make包含以下规则,它是否在解决依赖关系时被调用?
rule : File
发布于 2014-04-25 18:50:34
当包含makefile时,不会发生任何特殊的WRT排序。要制作,就好像构建了一个大型makefile,其中包含makefile的内容被插入到父makefile中的include
语句中,然后传递要生成的一个大型makefile。
因此,重写事物的规则(变量等)如果在单个makefile中重写一个变量,则与此相同:该变量的每个后续赋值都将替换以前赋值的值。
如果您为目标定义了一个(单冒号)规则,然后稍后再做一次,您将得到一条错误消息并使其忽略其中一个。
任何makefile中列出的第一个显式目标(包括与否)将是默认目标。
等。
记住,make从不完全“执行”任何makefile。Make不是一种过程语言,就像shell脚本一样。它首先分析所有makefile并在内部构造依赖关系图。然后选择默认的目标,并从每个部分开始遍历图的各个部分。
编辑:
如果以上这些不能帮助你回答你的其他问题,那么我认为你应该尝试一下。试试,看看会发生什么!这比要求我们解释要容易得多,而且如果你自己弄清楚了,你会更好地理解它。
https://stackoverflow.com/questions/23300718
复制相似问题