LoginSignup
5
2

More than 5 years have passed since last update.

Makefileの依存関係中のパイプ記号について

Posted at

以下のように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)を実行する」という挙動になる。


  1. Prerequisiteの訳(別に適切な訳があれば編集リクエストお願いします。) 

  2. パイプ記号、pipe symbol、縦棒、バーティカルバー、vertical bar (ググラビリティ向上の為の注釈) 

5
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
2