私は以下のディレクトリ構造を持っています。サブフォルダを使ったMakefileの使用
Project/
├── bin/
├── src/
│ ├── main.c
│ ├── util/
│ ├── util.c
│ ├── util.h
├── obj/
├── .depend/
すべてのソースコードはsrcフォルダにあります。 srcルートには、私のmain.cファイルがあります。 (または同じレベルのフォルダ内にある)同じレベルにある他のファイルも含まれます。下のMakefileは、同じレベルのmain.cのすべてのファイルでうまく動作しますが、src内のサブフォルダ内のファイルでは動作しません。
srcフォルダ内のサブフォルダを許可するようにMakefileを変更するにはどうすればよいですか?
CC := gcc
CFLAGS := -Wall -Wextra
BINDIR := bin
OBJDIR := obj
SRCDIR := src
DEPDIR := .depend
SOURCES := $(wildcard $(SRCDIR)/*.c)
OBJECTS := $(patsubst $(SRCDIR)/%.c, $(OBJDIR)/%.o, $(SOURCES))
DEPENDS := $(patsubst $(SRCDIR)/%.c, $(DEPDIR)/%.d, $(SOURCES))
$(BINDIR)/app: $(OBJECTS) | $(BINDIR)
@$(CC) -o [email protected] $^
-include $(DEPENDS)
$(OBJDIR)/%.o: $(SRCDIR)/%.c | $(OBJDIR)
@$(CC) $(CFLAGS) -c -o [email protected] $<
$(DEPDIR)/%.d: $(SRCDIR)/%.c | $(DEPDIR)
@$(CC) -MM -MG $< | sed 's!^\(.\+\).o:!$(DEPDIR)/\1.d $(OBJDIR)/\1.o:!' > [email protected]
$(DEPDIR) $(BINDIR) $(OBJDIR):
@mkdir [email protected]
clean:
@rm -rf $(BINDIR)/*
@rm -rf $(OBJDIR)/*
.PHONY: clean
EDIT:.o
と.d
ファイルは、構造のオリジナルデザインを尊重する必要はありません。そして、私は、Windows(MinGWの)
詳細を指定する必要があります。サブディレクトリにソースファイル用の '.o'と' .d'ファイルを作成する場所はどこですか?それらはすべて同じフラットディレクトリまたは同等のサブディレクトリに作成されるかどうかなどです。使用できるプラットフォーム固有のツールがある可能性があるため、プラットフォームも指定する必要があります。 –
申し訳ありませんが、.oファイルと.dファイルは構造の元のデザインを尊重する必要はありません。そして私はWindows(MinGW)を使っています –
オブジェクトファイルの同形ディレクトリ構造を生成する必要があります。純粋なmakeを使用することは可能ですが、最初のボイラープレートコードは少し長めです。私はそのためのギター・レポを作ることを考えています。 –