ビルドを自動化する方法を以下に示します.
# build。
########## 。#######
PROGRAM := hello.exe
SRCDIRS :=.
SRCEXTS :=.cpp
#########################################
SOURCES := $(foreach d,$(SRCDIRS),$(wildcard $(addprefix $(d)/*,$(SRCEXTS))))
OBJS := $(foreach x,$(SRCEXTS), \
$(patsubst %$(x),%.o,$(filter %$(x),$(SOURCES))))
DEPS = $(patsubst %.o,%.d,$(OBJS))
.PHONY : all obj
all : $(PROGRAM)
$(PROGRAM) : $(OBJS)
g++ -o $(PROGRAM) $(OBJS)
objs : $(OBJS)
%.d: %.cpp
g++ -MM -MD $<
-include $(DEPS)
%と*の違いについて:次の言葉をよく味わいます.1つは変数(すべての%は同じ文字列を表し、最初のマッチングで基準)で、1つはパスです.一般的には「$(wildcard*.c)」を使用して、作業ディレクトリの下のすべてを取得することができます.cファイルリスト.複雑な使い方;「$(patsubst%.c,%.o,$(wildcard*.c)」を使用する、まず「wildcard」関数を使用して作業ディレクトリの下を取得できます.cファイルリスト;その後、リスト内のすべてのファイル名の接尾辞が表示されます.c置換は.o.これにより、現在のディレクトリで生成可能なものを得ることができる.oファイルリスト.従って、1つのディレクトリの下で、以下の内容のMakefileを使用して、作業ディレクトリの下のすべてを使用することができる.cファイルはコンパイルされ、最後に実行可能なファイルに接続する:#sample Makefile objects:=$(patsubst%.c,%.o,$(wildcard*.c))foo:$(objects)cc-o foo$(objects)ここではmakeの暗黙のルールを使用してコンパイルする.cのソースファイル.変数の割り当てには、特殊な記号(:=)も使用されます.変数定義については、6.2の2つの変数定義のセクションを参照してください.関数「patsubst」は、8.2テキスト処理関数の一節#を参照することができる.dファイル.この2つの言葉があり、なぜ生成されたのかを理解するのに役立つ.dファイル---makefileの「include」を含むインジケータは、makeに現在のMakefileの読み取りを一時停止し、「include」で指定された1つ以上のファイルを読み取り、完了したら現在のMakefileの読み取りを継続するように伝えます.---makefileの更新(自己更新を含む)makeは、すべてのmakefileファイルを読み込んだ後、まず、読み込んだ各makefileをターゲットとして、更新するルールを探します.makefileファイルを更新する明確なルールまたは暗黙のルールがある場合は、対応するmakefileファイルを更新します.