LDFLAGS和ldflags-y

时间:2019-07-09 21:37:03

标签: makefile linux-kernel kernel-module kbuild ldflags

kbuild文档说:

  

ldflags-y ... [仅适用于]分配了它们的kbuild makefile。...[用于]递归构建期间发生的所有ld调用。

同时

  

LDFLAGS ... [用于]链接器的所有调用。

给定一个Makefile m(我们键入make m),我看不出它们之间有什么区别

  • 假设LDFLAGS := x,因为它适用于链接程序的所有调用,那么在ld开始的任何构建会话中调用的所有make m的值x }}
  • 假设LDFLAGS,因为如果适用于ldflags-y := y的所有递归调用,则所有ld被调用(由ld开始的任何构建会话)也具有值{{ 1}} make m

这种解释正确吗?

2 个答案:

答案 0 :(得分:1)

  
    

[仅适用于]分配了它们的kbuild生成文件

  

表示由给定Makefile中该变量定义的链接标志仅在出现在同一Makefile中的规则中使用。它们不是从父Makefile继承的,也不会传输到其他Makefile控制的子make中。

  
    

[用于]递归构建期间发生的所有ld调用。

  

这是关于设备的一般性声明,而不是关于通过该设备的任何特定用途指定的特定标志的声明。它说您可以在任何kbuild生成文件中使用ldflags-y变量,并希望看到文档中描述的行为-直接出现在同一makefile中的规则中的链接器调用将使用这些标志,但不会自动被传送到其他目录中的子make

另一方面,这...

  
    

LDFLAGS ... [用于]链接器的所有调用。

  

...出现在体系结构生成文件的文档中。如文档中所述,这些方法的目的是定义适用于整体构建以及(实质上)构建中所有内容的标志。此变量应该在这样的makefile文件中仅定义为 ,并且引号中指出,在构建期间的所有链接器运行中,无论在哪个makefile文件中出现相应的规则(包括,尤其是与架构文件不在同一棵树中的目录中。

文档继续说ldflags-y可用于进一步的自定义,您应该指出这两个 都已在链接器运行中应用。仔细阅读两行之间的内容,您应该希望(全局)LDFLAGS在链接器命令中的出现早于(本地)ldflags-y

  

在给定Makefile m的情况下,我看不到它们之间的任何区别(而且我们   输入make m)

     
      
  • 假设LDFLAGS:= x,因为它适用于链接程序的所有调用,因此在任何构建会话中从以下开始调用的所有ld   使L对于LDFLAGS具有值x
  •   

是,不是。一般的kbuild生成文件m 不应LDFLAGS提供定义。那仅属于适当的体系结构makefile。目前尚不清楚如果kbuild makefile这样做会发生什么,但我怀疑它会级联到sub make s。

此外,如果为kbuild配置了子树,则不应直接尝试make。该系统不是为此设计的。

  
      
  • 假设ldflags -y:= y,因为如果适用于ld的所有递归调用,那么所有ld都会被调用(由任何构建会话开始   来自make m)的LDFLAGS的值也为y
  •   

不。使用ldflags-y变量来提供本地链接标志自定义的功能适用于所有kbuild makefile。特定Makefile以这种方式提供的特定标志不会级联到子make

答案 1 :(得分:0)

reddit用户的help澄清了区别:实际上,ldflags-y适用于ld调用的发生在降级构建中,而不适用于当前的Makefile。简而言之,LDFLAGS定义了top ,然后降级的构建可以使用ldflags-y 来自定义此值。