2017-03-07 16 views
0

私は現在、私が過去に持っているより大きなプロジェクトに取り組んでいる、と私は、ツリーの私のファイルを整理しています(下記参照)Makefileの再帰

Project 
|   |-----Components|------folderb|-----asdf.cpp 
|   |    |    |-----fdsa.cpp 
|   |    | 
|----- Source|    |------afolder|-----qwerty.cpp 
|   | 
|   |-----Include|-----bar.h 
|       |-----foo.h 
|----- Bin 
| 
|----- Build 
| 
|----- Makefile 

私はまだどのように学んでいますmakefileを作っていますが、最後の数行ではまだ "ターゲットパターンと一致しません"というメッセージが表示されます。どんな助けでも本当にありがとう!

########################################## 
#   Editable options    # 
########################################## 
# Title 
EXECUTABLE_NAME=net 

# Compiler options 
CC=g++ 
CFLAGS= -Wall 
LDFLAGS= -Wall 

# Folders 
SRC_DIR=Source 
BLD_DIR=Build 
BIN_DIR=Bin 
HDR_DIR=$(SRC_DIR)/Include 

######################################################### 
#      Do Not Touch This     # 
######################################################### 
SOURCE_FILES := $(shell find $(SRC_DIR)/ -type f -name '*.cpp') 
SOURCE_FILE_NAMES := $(shell find $(SRC_DIR)/ -type f -name '*.cpp' -printf "%f\n") 
HEADER_FILES := $(wildcard $(HDR_DIR)*.h) 
OBJECT_FILES := $(SOURCE_FILE_NAMES:.cpp=.o) 
EXECUTABLE_FILES = $(EXECUTABLE_NAME:%=$(BLD_DIR)/%) 

build: $(EXECUTABLE_FILES) 

clean: 
    rm -r -f $(BIN_DIR) 

.PHONY: build clean 

$(EXECUTABLE_FILES): $(OBJECT_FILES) 
    @$(CC) $(LDFLAGS) -o [email protected] $^ 
    @echo "Build successful!" 

$(OBJECT_FILES): $(BIN_DIR)/%.o: $(SRC_DIR)/**/%.cpp 
    @echo Compiling $^ 
    @$(CC) $(CFLAGS) -o -c [email protected] $^ 

答えて

0

ので、具体的な問題はここにある:

$(OBJECT_FILES): $(BIN_DIR)/%.o: $(SRC_DIR)/**/%.cpp 

$(OBJECT_FILES)は、ソースファイルと同じディレクトリにあることを行っているあなた、彼らはSource/Components/afolder/qwerty.oようなものが含まれます。しかし、それはBin/%.oと一致しないので、パターンルールは適用されません。したがって、オブジェクトを作成するためのルールはありません。そこには%.o : %.cppがほしいだけです。


ファイル名を取得するのにshellを使用する必要はありません。同じ効果で$(notdir $(SOURCE_FILES))を使用することもできます。

あなたの定義には/がありません。HEADER_FILES