Shell 生成文件递归

Shell 生成文件递归,shell,makefile,Shell,Makefile,我目前正在做一个比过去更大的项目,因此我将文件组织在一棵树中(见下文) 我仍在学习如何制作makefiles,但在最后几行中,我仍然得到一个“与目标模式不匹配”。任何帮助都将不胜感激 ########################################## # Editable options # ########################################## # Title EXECUTABLE_NAME=net

我目前正在做一个比过去更大的项目,因此我将文件组织在一棵树中(见下文)

我仍在学习如何制作makefiles,但在最后几行中,我仍然得到一个“与目标模式不匹配”。任何帮助都将不胜感激

##########################################
#           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 $@ $^
    @echo "Build successful!"

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

因此,具体问题是:

$(OBJECT_FILES): $(BIN_DIR)/%.o: $(SRC_DIR)/**/%.cpp
您的
$(OBJECT_文件)
将与源文件位于同一目录中,它们将包括
source/Components/afolder/qwerty.o
之类的内容。但这与
Bin/%.o
不匹配,所以该模式规则不适用。因此,您没有构建对象的规则。您只需要
%.o:%.cpp
就可以了


还要注意的是,您不需要使用
shell
来获取文件名。您可以使用
$(notdir$(源文件))
获得相同的效果

此外,在
头文件的定义中缺少
/

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