2016-12-17 9 views
2

私は最初のメークファイルに取り組んでいます。メイクがターゲットと一致しない

BUILD = build 
BIN = bin 
OUTPUTNAME = game.out 
INCLUDE = /internalLibraries/include 

SRCFILES := $(wildcard src/*.cpp) 
OBJFILES := $(patsubst %.cpp,%.o,$(SRCFILES)) 
OBJFILES := $(foreach dir,$(OBJFILES),$(subst src/,,$(dir))) 
DIR := $(dir $(OBJFILES)) 

$(foreach d,$(DIR),$(shell mkdir -p $(BUILD)/$(d))) 
$(shell mkdir -p $(BIN)) 

CC = g++ 
CFLAGS = -g -std=c++11 
LIBS=-lsfml-graphics -lsfml-window -lsfml-system 


G++_VER_LT48 := $(shell expr `$(CC) -dumpversion | cut -f1-2 -d.` \< 4.8) 
ifeq ("$(G++_VER_LT48)","1") 
$(error old version of g++ not supported, upgrade to 4.8 or higher) 
endif 


default: $(BIN)/$(OUTPUTNAME) 

$(info $(OBJFILES)) 
$(BIN)/$(OUTPUTNAME): $(BUILD)/$(OBJFILES) 
    $(CC) $(CFLAGS) -o $(BIN)/$(OUTPUTNAME) $(BUILD)/main.o $(BUILD)/game.o $(BUILD)/food.o $(BUILD)/snake.o $(LIBS) 


$(BUILD)/%.o: %.cpp 
    $(CC) -c $(CFLAGS) $< -o [email protected] -I $(INCLUDE) 

問題は、これは出力を生成し実行している、次のとおりです。

[email protected]:/mnt/c/Users/sidhi/Desktop/Projects/sfml-snake$ make 
food.o game.o main.o snake.o 
make: *** No rule to make target `build/food.o', needed by `bin/game.out'. Stop. 

問題は何ですか、私はそれを作ることができません。 「ビルド」へBUILDセットで

答えて

1
$(BUILD)/%.o: %.cpp 

、これは「food.cpp」から「/ food.oを構築する」という目標を構築するためのルールを指定します。

「food.cpp」が存在しないという問題は明らかです。

SRCFILES := $(wildcard src/*.cpp) 
+0

実際のソースファイルは "src/food.cpp"です。パターンルールを '$(BUILD)/%。o:src /%に変更することができます。 cpp' – user268396

関連する問題