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
这种解释正确吗?
答案 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