2017-04-19 17 views
0

を介して特定のディレクトリ内のオブジェクトファイルを作成します。Makefileの

object.o: $(SRCDIR)object.c 
    $(CC) -c $(CFLAGS) $(INCLUDEDIR) $< 
    mv object.o $(OBJDIR) 

目標は、それを作成中に自動的にディレクトリ内の.oファイルを作成することです。すなわち、最初に作成してから移動するのは好きではありません。

私はこれをしなかった:

$(OBJDIR)/object.o: $(SRCDIR)object.c 
    $(CC) -c $(CFLAGS) $(INCLUDEDIR) $< 

この1つの出力:make: *** No rule to make target 'object.o', needed by 'all'. Stop.

任意の方向は、それを達成するためにどのように?

+0

'SRCDIR'に'/'が含まれていますか? 'OBJDIR'はそれを持っているようには見えないので、最後に追加します。 – kaldoran

+0

@kaldoranはい SRCDIR:= src/ –

+1

ビットだけでなく、メイクファイルを投稿する必要があります。 –

答えて

0

解決しました。

object.o: $(SRCDIR)object.c 
    $(CC) -c -o $(OBJDIR)/object.o $(CFLAGS) $(INCLUDEDIR) $^ 
+0

に書き込んでください。それは決してターゲットを作成しないレシピです。それは間違った解決策です。それはあなたがまだ発見していない他のものを作成することによってあなたが知っている問題を解決します。 –

+0

@MikeKinghanあなたは詳しく教えていただけますか? .oファイルのみを作成する必要がありました。私は後で目標を作りました。私のMakefileのスニペットに与えられていないすべての.oファイルをリンクしています。 –

+0

@MikeKinghan ie。 実行ファイル:\t $(patsubst%、$(OBJDIR)/%、$(OBJ)) \t $(CC)$(CFLAGS)$(includedir以下)-o $ @ $^ これも –

1

私はあなたがこのような何かを探していると思う:

$(OBJS) = $(patsubst $(SRCS),$(SRCDIR)/%.c,$(OBJDIR)/%.o) 

$(OBJS) : $(SRCDIR)/%.o : $(OBJDIR)/%.c 
    @echo "$< => [email protected]" 
    @$(CC) -c -o [email protected] $(CFLAGS) $(INCLUDEDIR) $< 

これは、特定のパターンを使用してオブジェクトを構築すると言うstatic pattern ruleです。私はあなたが末尾の/$(SRCDIR)の外に移動したと仮定していることに注意してください。

+0

また、 '$(OBJDIR)'を作成するための依存関係のみを検索したい場合があります。 – blackghost

+0

yup、私は移動してしまいました。後で静的パターンルールも使用しました。しかし、懸念をありがとう。 –