私は今このMakefileを少なくとも3回は動作させようとしています。それぞれの反復で、以前のいくつかの問題を修正しながら、私の目標に近づきつつありますが、公式のGNUドキュメントを読み直しています。今私は理解していない場所が1つだけ残っています。ここでmakeはすべてのオブジェクトを再コンパイルしますか?
はMakefileのだ:
MAKEFLAGS=-j2
CC=clang++
OPTIMALIZATION=-O2
CFLAGS=-c -std=c++11 -gsplit-dwarf -I. -Iengine -Iengine/bootstrap
LDFLAGS=-lglut -lGL -lGLU -lGLEW -lSOIL -lassimp
SOURCES=$(wildcard *.cpp engine/*.cpp engine/lighting/*.cpp engine/bootstrap/*.cpp)
OBJECTS=$(SOURCES:.cpp=.o)
EXECUTABLE=$(addprefix build/,$(shell basename ${PWD}))
.PHONY: depend clean
all: $(SOURCES) $(EXECUTABLE)
$(EXECUTABLE): $(OBJECTS)
$(CC) $(addprefix build/,$(notdir $(OBJECTS))) -o [email protected] $(LDFLAGS)
.cpp.o:
$(CC) $(CFLAGS) $< -o build/$(notdir [email protected])
run: all
./$(EXECUTABLE)
clean:
rm -rf build/*
depend: $(SOURCES)
makedepend $^
# DO NOT DELETE
私の目標は、./build
ディレクトリにすべてのファイルを構築することです。そして、私は最近、いくつかのファイル名関数を使ってこれを行うことができました。
しかし今はmake
またはmake run
を実行するたびに、プロジェクト全体が再コンパイルされます。
最近変更されたファイルに対してのみ動作するように修正するにはどうすればよいですか?
私はメイクの専門家でありませんが、あなたの '.cpp.o'ルールは何の依存関係を示していますない私には思えます。 – Angew