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