【问题标题】:Execution flow of Makefile which includes other makefileMakefile 的执行流程,包括其他 makefile
【发布时间】:2014-04-25 18:43:47
【问题描述】:

1) makefile 执行流程是如何工作的,如果假设 makefile-1 包含另一个 makefile-2 而 makefile-2 包含另一个 makefile-3 ?

2) 如果包含的 makefile 包含一些应该被所有三个使用的规则和变量 - 它是如何工作的?如果一个人多次包含同一个 makefile 会发生什么?

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

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

4) 但是如果两个包含的 makefile 覆盖了彼此的变量或规则会发生什么? 是不是最后一个包含的makefile优先?

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

6) make 中有两种赋值:

i) 使用时展开 (=)

ii) 在声明时扩展 (:=) 这种变量如何在多级 makefile 中处理?

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

File = abc def ghi 
File += $(notdir ghi/jkl)

这个 notdir 调用什么时候发生?

(and also if I use ':=' what will be the difference ?)

考虑 make 包含以下规则,是否在解决依赖关系时调用它?

rule : File

【问题讨论】:

    标签: makefile gnu-make


    【解决方案1】:

    包含 makefile 时不会发生特殊的 WRT 排序。制作,就好像你构建了一个大的makefile,其中包含的makefile的内容插入到父makefile中出现include语句的位置,然后传递一个大的makefile来制作。

    因此,覆盖事物(变量等)的规则与覆盖单个 makefile 中的变量的规则相同:变量的每个后续赋值都会替换先前赋值的值。

    如果您使用目标配方定义(单冒号)规则,然后再执行此操作,则会收到错误消息并忽略其中一个。

    任何 makefile 中列出的第一个显式目标,无论是否包含,都将是默认目标。

    等等

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

    已编辑:

    如果以上内容不能帮助您回答其他问题,那么我认为您应该尝试一下。尝试一下,看看会发生什么!这比让我们解释更容易,而且如果你自己弄清楚,你会更好地理解它。

    【讨论】:

    • 当你说make从不完全执行任何makefile时,它是否也适用于包含的makefile,如果是这样,那么它如何决定是否应该执行任何变量的声明/定义语句行, 一般我们不使用任何对变量的依赖。
    • 正如我所说,包含的 makefile 的行为与创建一个大的 makefile 相同。我所说的“从不完全执行”的意思是 make parses 所有的 makefile。但 make 不一定build 所有目标。 Make 将从第一个目标(或您在命令行中提供的目标)开始并构建其先决条件及其先决条件等。但如果存在不是初始目标集的先决条件的目标,则不会构建这些目标.并且目标不是按照它们在 makefile 中出现的顺序来考虑的:它们是按照先决条件的顺序来考虑的。
    • 虽然我的问题中的大部分观点都没有得到解答,但我自己解决了。而且一般都写在这里,最好参考GNU makefile手册,这对我理解make方法有一定的帮助。我感谢所有的 cmets,因为它帮助我朝着正确的方向前进。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-10-02
    • 1970-01-01
    • 1970-01-01
    • 2014-05-05
    • 1970-01-01
    • 2021-01-16
    • 1970-01-01
    相关资源
    最近更新 更多