符号管道“ |”是什么 在Makefile中的意思

Mou*_*uin 1 openwrt makefile

target / linux / ar71xx / image / Makefile

KERNEL := kernel-bin | patch-cmdline | lzma | uImage lzma
Run Code Online (Sandbox Code Playgroud)

您能否帮助我理解这一行的含义,并提供有关如何|在Makefile中使用符号管道的示例

小智 6

“|”还有另一种用途 管道符号 - 定义仅顺序先决条件,仅提供目标排序而不构建依赖关系:

例如:

OBJDIR := objdir
OBJS := $(addprefix $(OBJDIR)/,foo.o bar.o baz.o)

$(OBJDIR)/%.o : %.c
        $(COMPILE.c) $(OUTPUT_OPTION) $<

all: $(OBJS)

$(OBJS): | $(OBJDIR)

$(OBJDIR):
        mkdir $(OBJDIR)

Run Code Online (Sandbox Code Playgroud)

参考: https: //www.gnu.org/software/make/manual/html_node/Precession-Types.html


Mad*_*ist 5

这行代码只是将make变量KERNEL设置为string kernel-bin | patch-cmdline | lzma | uImage lzma。管道符号(|)在此处没有特殊含义。

您必须查看如何使用变量。它很可能出现在某个地方的食谱中,如下所示:

foo:
       $(KERNEL)
Run Code Online (Sandbox Code Playgroud)

在这种情况下,变量将被扩展,并将结果发送到外壳。在外壳中,管道符号使左侧命令中的stdout与righ命令中的stdin挂钩:这称为管道或管道数据。

这里有4条命令的管道:kernel-bin的输出发送到'patch-cmdline的输入,patch-cmdline的输出发送到lzma的输入,lzma的输出发送到uImage lzma的输入。