0

kbuild文档说:

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

尽管

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

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

  • 假设LDFLAGS := x,因为它适用于链接器的所有调用,所以在从 开始的ld任何构建会话中调用的所有都make m具有xLDFLAGS
  • 假设ldflags-y := y,因为如果适用于 的所有递归调用ld,则所有ld调用(由从 开始的任何构建会话make m)也y具有LDFLAGS

这种解释正确吗?

4

2 回答 2

1

[适用] 仅适用于分配它们的 kbuild makefile

意味着给定makefile中该变量定义的链接标志仅用于出现在同一makefile中的规则。它们不是从父 makefile 继承的,也不会传输到make其他 makefile 控制的 sub-s。

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

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

另一方面,这...

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

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

文档继续说ldflags-y可以用于进一步的定制,你应该指出这两者都应用于链接器运行。仔细阅读两行之间的内容,您应该期望 (global)LDFLAGS出现在链接器命令中比 (local) 更早ldflags-y

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

  • 假设 LDFLAGS := x,因为它适用于链接器的所有调用,那么在从 make m 开始的任何构建会话中调用的所有 ld 都具有 LDFLAGS 的值 x

是和不是。一般的 kbuild makefilem 不应该LDFLAGS. 那只属于适当的架构makefile。目前尚不清楚如果 kbuild makefile 仍然这样做会发生什么,但我怀疑它会级联到 sub- makes。

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

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

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

于 2019-07-11T12:20:34.573 回答
0

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

于 2019-07-11T09:09:16.163 回答