以下のようにMakefileの依存関係1中|
2記号が混じっていたので、その挙動について調査。
Makefile
target: hoge fuga | piyo
command1
command2
...
GNU Makeのドキュメントの4.3 Types of Prerequisitesに説明が乗っていました。
targets : normal-prerequisites | order-only-prerequisites
どうやら|
記号の以降の依存関係はorder-only-prerequisitesというらしい。
通常の依存関係(normal-prerequisites)は、それが存在しない、または更新されていたらtargetルールを実行するのに対し、
order-only-prerequisitesは、それが存在しない場合のみtargetルールを実行する(つまり更新を無視する)らしい。
公式ドキュメントでは、以下の様な例が示されている。
Makefile
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)
この例でいうと、「OBJDIRで指定されたディレクトリが存在しない場合だけmkdir $(OBJDIR)
を実行する」という挙動になる。