LDFLAGS 和 ldflags-y 的区别

Difference between LDFLAGS and ldflags-y

kbuild 文件说:

ldflags-y... [applies] only to the kbuild makefile in which they are assigned....[is used] for all ld invocations happening during a recursive build.

同时

LDFLAGS... [is used] for all invocations of the linker.

给定 Makefile m(我们键入 make m),我看不出它们之间有任何区别

这个解释正确吗?

来自 reddit 用户的 help 阐明了区别:实际上 ldflags-y 适用 因为 ld 调用发生在降序构建中,而不是 用于当前 Makefile 的构建。简而言之,LDFLAGS 定义了 top,然后降序构建可以使用 ldflags-y.

自定义此值

[applies] only to the kbuild makefile in which they are assigned

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

[is used] for all ld invocations happening during a recursive build.

这是关于一般设施的声明,而不是关于通过该设施的任何特定使用指定的特定标志。它说你可以在任何 kbuild makefile 中使用一个 ldflags-y 变量,并期望看到文档中描述的行为—— linker 直接出现在同一个 makefile 中的规则调用将使用这些标志,但它们不会自动传送到其他目录中的子make

另一方面,这...

LDFLAGS... [is used] for all invocations of the linker.

... 出现在体系结构 makefile 的文档中。如文档中所述,这些的要点是定义适合整个构建和(基本上)其中所有内容的标志。这个变量应该在这样的 makefile 中定义 only,引文说 linker 标志以这种方式定义在所有 linker 运行期间构建,无论相应的规则出现在哪个 makefile 中(尤其包括在与体系结构 makefile 不在同一树中的目录中)。

文档继续说 ldflags-y 可以用于进一步的定制,你应该用它来表明 both 在 link 中应用呃运行。仔细阅读两行之间的内容,您应该期望(全局)LDFLAGS 在 linker 命令中比(本地)ldflags-y.

更早出现

I cannot see any difference between them, given a Makefile m (and we type make m)

  • suppose LDFLAGS := x, because it applies for all invocations of the linker, then all ld invoked in any build session starting from make m has value x for LDFLAGS

是也不是。一般的 kbuild makefile m 不应该 提供 LDFLAGS 的定义。那只属于适当的体系结构 makefile。目前还不清楚如果 kbuild makefile 这样做会发生什么,但我怀疑它会级联到 sub-makes.

另外,你不应该尝试直接make一个子树,如果它是为kbuild配置的。该系统不是为此设计的。

  • suppose ldflags-y := y , becaus if applies for all recursived invocations of ld, then all ld invoked (by any build session starting from make m) has also value y for LDFLAGS

没有。使用 ldflags-y 变量提供本地 link-flag 自定义的能力适用于所有 kbuild makefile。特定 makefile 以这种方式提供的特定标志不会级联到子 makes.