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
),我看不出它们之间有任何区别
- 假设
LDFLAGS := x
,因为它适用于链接器的所有调用,那么在从 make m
开始的任何构建会话中调用的所有 ld
对于 LDFLAGS
- 假设
ldflags-y := y
,因为如果适用于 ld
的所有递归调用,那么所有 ld
调用(由从 make m
开始的任何构建会话)也具有值y
对于 LDFLAGS
这个解释正确吗?
来自 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-make
s.
另外,你不应该尝试直接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 以这种方式提供的特定标志不会级联到子 make
s.
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
),我看不出它们之间有任何区别
- 假设
LDFLAGS := x
,因为它适用于链接器的所有调用,那么在从make m
开始的任何构建会话中调用的所有ld
对于LDFLAGS
- 假设
ldflags-y := y
,因为如果适用于ld
的所有递归调用,那么所有ld
调用(由从make m
开始的任何构建会话)也具有值y
对于LDFLAGS
这个解释正确吗?
来自 reddit 用户的 help 阐明了区别:实际上 ldflags-y
适用 因为 用于当前 Makefile 的构建。简而言之,ld
调用发生在降序构建中,而不是 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-make
s.
另外,你不应该尝试直接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 以这种方式提供的特定标志不会级联到子 make
s.