从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
这行代码只是将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的输入。