いくつかの提案 ( GNU makeを使用すると仮定し、他のものではありません)
まず、一度実行するとmake -p
、組み込みのルールが認識していることを理解できますmake
。COMPILE.c
特にとを探しますLINK.c
次に、私は提案します
CFLAGS= -g -Wall -I.
(本当に-g
デバッグが必要で、-Wall
ほとんどの警告が表示されるため)
そして、あなたはおそらく必要ありません
$(EXECUTABLE): $(OBJ)
gcc -o $@ $^ $(CFLAGS)
ただし、他のほとんどのルールの前に追加することをお勧めします
.PHONY: all clean
all: $(EXECUTABLES)
実際、私はあなたのMakefile
(GNU make
の場合!)を次のようにコーディングします
# file Makefile
CC= gcc
RM= rm -vf
CFLAGS= -Wall -g
CPPFLAGS= -I.
SRCFILES= ex1.c ex2.c ## or perhaps $(wildcard *.c)
OBJFILES= $(patsubst %.c, %.o, $(SRCFILES))
PROGFILES= $(patsubst %.c, %, $(SRCFILES))
.PHONY: all clean
all: $(PROGFILES)
clean:
$(RM) $(OBJFILES) $(PROGFILES) *~
## eof Makefile
は -s ( rulesのアクション部分)tabの重要な文字であることを忘れないでください。この回答では、少なくとも 4 つのスペースで始まる行は、実際には文字で始まる必要があります。Makefile
tab
すべてがデバッグされたら、実行make clean
してすべてをクリーンにし、次にmake -j CFLAGS=-O2 all
すべてを最適化して並列にコンパイルすることを検討してください。
最後に、複雑な-sをデバッグするために使用remake
して実行することをお勧めしますremake -x
Makefile
もちろん、あなたのディレクトリには単一ファイルのプログラムしかないと思います。
ところで、他のビルド自動化ツールがあります。おそらく、 omakeやninja の使用を検討するかもしれません。大規模なプログラム (数百万のソース コード行) を構築する場合は、 automake、ccache、cmake、icecreamも検討してください。場合によっては、GPP、GNU bison、SWIGなどで C コードを生成するか、独自のPythonまたはGuileスクリプト (または C メタプログラム) を使用することを検討してください。この草稿レポートも参照してください。
ソース ファイルには、gitなどのバージョン管理システムを使用することを忘れないでください。そのようなツールを学ぶ時でもあります。