メイクファイルの設定方法を学んでいるのですが、問題が発生しました。これを実証するために、ソース ファイルmain.m
とtest.m
.
これらのファイルをコンパイルするようにmakeをセットアップしようとしています(何かが変更された場合のみ)、オブジェクトファイルを別の場所に保存しようとしています(ここbuild/
)
私のメイクファイル:
OBJ = ./build
SOURCES=main.m test.m
OBJECTS=$(addprefix $(OBJ)/,$(SOURCES:.m=.o))
EXECUTABLE=test
all: $(EXECUTABLE)
$(EXECUTABLE): $(OBJECTS)
gcc $(OBJECTS) -o $(EXECUTABLE)
$(OBJECTS): $(OBJ)/%.o: %.m build/
gcc -c $< -o $@
build/:
mkdir build
初めて実行すると (現在のディレクトリに Makefile とソースのみを使用して)、期待どおりに動作します。
gcc -c main.m -o build/main.o
gcc -c test.m -o build/test.o
gcc ./build/main.o ./build/test.o -o test
ただし、make
もう一度実行すると:
gcc -c main.m -o build/main.o
gcc ./build/main.o ./build/test.o -o test
私は何を間違えましたか?また、「良い」Makefile を作成する方法を学ぼうとしているので、Makefile の他のエラーに注意してください。
編集:
私が見つけたものmake -d
:
Finished prerequisites of target file `build/main.o'.
Prerequisite `main.m' is older than target `build/main.o'.
Prerequisite `build/' is older than target `build/main.o'.
No need to remake target `build/main.o'.
と
Finished prerequisites of target file `build/test.o'.
Prerequisite `test.m' is older than target `build/test.o'.
Prerequisite `build/' is newer than target `build/test.o'.
Must remake target `build/test.o'.